Python tkinter修改Label文本报AttributeError: gui类无label属性错误
错误原因
- 混淆了类与类实例的概念:
label是gui类的实例属性,仅在类实例化后生成,由具体的实例对象持有,gui类本身不包含该属性。代码中直接通过类名gui调用实例方法setLabelText,自然找不到label属性。 mainloop()放置在__init__方法中会阻塞代码执行,全局作用域无法在窗口运行期间操作实例对象。- 全局函数
changeText未接收gui类实例作为入参,无法调用实例方法修改实例属性。
修复方案
方案1:直接在类内部调用方法(无需外部函数,修改量最小
from tkinter import * class gui: def __init__(self): self.root = Tk() self.label = Label(self.root, text='Y') self.label.pack() self.button = Button(self.root, text='Click', command=self.__btnClick) self.button.pack() def __btnClick(self): self.setLabelText() def setLabelText(self): self.label['text']= 'X' if __name__ == '__main__': window = gui() mainloop()
方案2:需要通过外部函数修改文本的实现
from tkinter import * class gui: def __init__(self): self.root = Tk() self.label = Label(self.root, text='Y') self.label.pack() # 绑定点击事件时传入当前实例作为参数 self.button = Button(self.root, text='Click', command=lambda: changeText(self)) self.button.pack() def setLabelText(self): self.label['text']= 'X' def changeText(gui_instance): # 调用实例的方法而非类的方法 gui_instance.setLabelText() if __name__ == '__main__': window = gui() mainloop()
内容的提问来源于stack exchange,提问作者wooweewoo
相关产品推荐
相关产品推荐

