0

我想通过类中的 setter 方法从类外部更改标签文本。我刚刚得到 AttributeError: type object 'gui' has no attribute 'label'。我尝试通过 label['text']; 更改文本 标签.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

谢谢您的帮助!

4

1 回答 1

1

您必须在类本身上调用notsetLabelText的实例。gui当您调用setLabelText时,__btnClick您必须将实例gui作为参数提供给此函数。您已经在参数中获得了实例self

所以__btnClick应该改成:

def __btnClick(self):
    changeText(self)

changeText应改为:

def changeText(the_window):
    the_window.setLabelText()

我想添加一个指向Python 代码样式指南的链接。对于有经验的程序员来说,您的代码很难阅读(好吧,不是那么难,但比必要的难),因为您不遵循命名约定。

于 2021-12-06T23:09:15.263 回答