AttributeError: type object 'gui' has no attribute 'label'

AttributeError: type object 'gui' has no attribute 'label'

我想通过 class 中的 setter 方法从 class 外部更改标签文本。我刚开始 AttributeError:类型对象 'gui' 没有属性 'label'。我尝试通过标签['text']更改文本; label.config(文字='X')

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()

        mainloop()

    def __btnClick(self):
        changeText()
        
    def setLabelText(self):
        self.label['text']= 'X'

def changeText():
    gui.setLabelText(gui)

if __name__ == '__main__':
    window = gui()

我不知道它是否有帮助,但这是我的完整代码 https://pastebin.com/bT43NgpH

感谢您的帮助!

您必须在 gui 的实例而不是 class 本身上调用 setLabelText。当您在 __btnClick 中调用 setLabelText 时,您必须将 gui 的实例作为此函数的参数。您在参数 self.

中获得了实例

所以__btnClick应该改成:

def __btnClick(self):
    changeText(self)

changeText应该修改为:

def changeText(the_window):
    the_window.setLabelText()

我想在 Style Guide for Python Code 中添加一个 link。对于有经验的程序员来说,您的代码很难阅读(好吧,不是那么难,但比必要的难),因为您不遵循命名约定。