如何在Tkinter中获取定义在类内部的Entry控件的输入文本
Tkinter Entry控件跨作用域读取输入内容解决方案
原代码核心问题
- 函数定义顺序错误:
get_value函数定义在obj.buttons初始化之后,Button绑定command时找不到对应函数 - 变量未定义错误:
get_value中调用的entry变量不存在,全局作用域没有声明过名为entry的Entry控件实例 - 取值方法错误:绑定
textvariable后直接读StringVar的.get()方法即可,不需要额外调用Entry控件的取值方法
修复后可运行代码
from tkinter import * class main: def __init__(self, master): self.master = master def entry(self, entry_widget, width, text): self.width = width self.text = text self.entry_widget = Entry(self.master, width = self.width, textvariable = self.text) self.entry_widget.pack() def buttons(self, button_widget, width, height, text): self.width = width self.height = height self.text = text self.button_widget = Button(self.master, width = self.width, height = self.height, text = self.text, command = get_value) self.button_widget.pack() # 调整函数定义顺序,保证绑定时可以找到 def get_value(): # 直接读取绑定的StringVar的值 input_content = my_text.get() print(input_content) root = Tk() my_text = StringVar() obj = main(root) obj.entry("field", 60, my_text) obj.buttons("my_button", 30,2,"click") # 原高度20过大,调整为2符合常规使用习惯 root.mainloop()
其他场景取值方案
无绑定textvariable时取值
如果没有给Entry控件绑定StringVar,可以直接从类实例中取Entry控件对象调用.get()方法:
def get_value(): input_content = obj.entry_widget.get() print(input_content)
跨文件取值
如果需要在其他文件的函数中读取Entry内容,只需要把类实例obj或者绑定的my_text变量导入到目标文件即可,注意规避循环导入问题。
内容的提问来源于stack exchange,提问作者FozenOption
相关产品推荐
相关产品推荐

