#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. Ваш код трудно читать опытному программисту (хорошо, не так сложно, но сложнее, чем необходимо), потому что вы не соблюдаете соглашения об именах.