Ошибка атрибута: объект типа «gui» не имеет атрибута «label»

#python #tkinter #label #tkinter-label

#python #tkinter #метка #tkinter-label

Вопрос:

Я хочу изменить labeltext извне класса с помощью метода setter в классе. Я просто получаю AttributeError: тип объекта «gui» не имеет атрибута «label». Я попытался изменить текст с помощью label [‘text’]; label.config(text = ‘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

Спасибо за вашу помощь!

Ответ №1:

Вы должны вызывать setLabelText экземпляр gui , а не сам класс. При вызове setLabelText вы __btnClick должны указать экземпляр gui в качестве параметра для этой функции. У вас есть экземпляр в параметре self .

Поэтому __btnClick его следует изменить на:

 def __btnClick(self):
    changeText(self)
 

И changeText должен быть изменен на:

 def changeText(the_window):
    the_window.setLabelText()
 

Я хотел бы добавить ссылку на руководство по стилю для кода Python. Ваш код трудно читать опытному программисту (хорошо, не так сложно, но сложнее, чем необходимо), потому что вы не соблюдаете соглашения об именах.