如何在Python Tkinter中获取创建对象后的Entry输入值?
解决Tkinter跨类获取Entry输入值的问题
你的核心问题是**WindowClass没有保存创建的FrameClass实例引用**,导致get_value方法无法访问到对应的Entry组件。以下是具体修改方案:
关键修改点
- 在
WindowClass中添加实例属性,存储创建的FrameClass对象 - 修改
create_frame方法,将局部创建的对象赋值给该属性 - 在
get_value方法中通过保存的实例引用,调用Entry的get()方法获取输入值
修改后的完整代码
import tkinter as tk class WindowClass: def __init__(self): super().__init__() root = tk.Tk() self.master = root self.master.geometry('500x500') # 添加实例属性,用于保存FrameClass对象 self.frame_instance = None self.create_frame_button = tk.Button(self.master, text='Create Frame with Entry', width=20, command=self.create_frame) self.get_value_button = tk.Button(self.master, text='Get value from frame', width=20, command=self.get_value) self.create_frame_button.place(x=10, y=10) self.get_value_button.place(x=10, y=40) root.mainloop() def create_frame(self): # 将创建的FrameClass对象赋值给实例属性,而非局部变量 self.frame_instance = FrameClass(self.master) def get_value(self): # 先判断是否已创建Frame实例 if self.frame_instance: # 通过实例引用获取Entry的输入值 input_value = self.frame_instance.entrybox.get() print("输入的值是:", input_value) # 也可以在这里把值显示到窗口上,比如用Label # tk.Label(self.master, text=f"输入值:{input_value}").place(x=10, y=70) else: print("请先点击'Create Frame with Entry'创建输入框") class FrameClass: def __init__(self, master): self.master = master self.frame = tk.Frame(self.master, height=250, width=480, relief='solid', bd=4) self.entrybox = tk.Entry(self.frame, width=15, font='Calibri, 12') self.entrybox.place(x=10, y=10) self.frame.place(x=10, y=100) if __name__ == '__main__': WindowClass()
补充说明
- 如果允许创建多个
FrameClass实例,可以用列表(self.frame_instances = [])来存储,在get_value时遍历获取每个实例的输入值 - 若要更符合封装原则,可以在
FrameClass中添加一个get_entry_value方法,替代直接访问entrybox属性,比如:
然后在class FrameClass: # ... 其他代码 ... def get_entry_value(self): return self.entrybox.get()WindowClass的get_value中调用self.frame_instance.get_entry_value()
内容的提问来源于stack exchange,提问作者Alena
相关产品推荐
相关产品推荐

