如何在CustomTkinter的App类中获取TabView组件的最终输入值?
问题解决:CTkTabview组件值获取与实时监听
核心错误修正
原代码中App.fn_okay方法直接调用MyTabView.Entry.get()是错误的——你需要访问MyTabView的实例属性而非类属性。self.tab_view是你创建的MyTabView实例,应该通过它来获取输入框的最新值。
同时,MyTabView初始化时的response = self.Entry.get()只会捕获初始值,无法同步后续输入的变化,必须在点击OK时实时读取。
修改后的完整代码
import customtkinter as ctk class MyTabView(ctk.CTkTabview): def __init__(self, master, **kwargs): super().__init__(master, **kwargs) self.add("tab 1") self.add("tab 2") # 初始化StringVar并绑定到输入框,方便后续监听或取值 self.entry_var = ctk.StringVar(value='Something') self.entry = ctk.CTkEntry(master=self.tab('tab 1'), textvariable=self.entry_var) self.entry.grid(row=0, column=0, padx=20, pady=10) # 初始化时打印初始值(可选) print("初始值:", self.entry_var.get()) class App(ctk.CTk): def __init__(self): super().__init__() self.tab_view = MyTabView(master=self) self.tab_view.grid(row=0, column=0, padx=20, pady=20) self.OKButton = ctk.CTkButton(self, text='OK', command=self.fn_okay) self.OKButton.grid(row=3, column=1, columnspan=1, padx=20, pady=20, sticky='ew') # 可选:添加实时监听输入框内容变化的逻辑 self.tab_view.entry_var.trace_add("write", self.on_entry_change) def fn_okay(self): # 通过实例获取输入框的最新值 response = self.tab_view.entry.get() # 或者直接从StringVar获取,结果一致 # response = self.tab_view.entry_var.get() print("提交的值:", response) def on_entry_change(self, *args): # 实时监听输入变化的回调函数 current_value = self.tab_view.entry_var.get() print("实时变化值:", current_value) app = App() app.mainloop()
关键修改点说明
- 将输入框实例命名为
self.entry(遵循小写开头的Python命名规范),并通过self.tab_view.entry访问实例属性。 - 显式创建
self.entry_var绑定到输入框,既可以通过entry_var.get()取值,也能通过trace_add实现实时监听。 App.fn_okay中直接调用实例的entry.get()或entry_var.get()获取最新值,避免类属性访问错误。- 若需要实时监听输入变化,使用
StringVar.trace_add("write", 回调函数)即可,CustomTkinter完全兼容Tkinter的变量监听机制。
内容的提问来源于stack exchange,提问作者Andrew Eaves
相关产品推荐
相关产品推荐

