Python 3 не может обновить текст метки tkinter

Прежде всего, я знаю, что есть множество тем по этой проблеме, но я до сих пор не продвинулся в этом, ни одно из решений не работает. Я даже создал минимальный пример с 9 строками кода, и что бы я ни делал, текст метки не изменится:

root = tkinter.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

root.geometry("500x50" + "+" + str(screen_width - 520) + "+" + str(screen_height - 140))
root.title("POE Price Checker")
rootLabelHeader = tkinter.Label(root, text = "Currently searching:").pack()

labelText = tkinter.StringVar()
labelText.set("Nothing")
rootLabelInfo = tkinter.Label(root, text = labelText.get(), width=90).pack()

#rootLabelInfo.configure(text="New String") # Nope
#rootLabelInfo.config(text="New String") # Nope

labelText.set("Doesnt Work")
labelText.get()

#root.after(1000, ListenToInput)
root.mainloop()

Сначала я попытался использовать StringVar, но ничего не происходит, он никогда не меняет текст на «Не работает», также никаких ошибок не отображается.

Затем я попытался использовать:

rootLabelInfo.configure(text="New String")
rootLabelInfo.config(text="New String")

Оба дают мне NoneType object has no attribute config.


person Roman    schedule 17.06.2019    source источник
comment
rootLabelHeader = tkinter.Label(root, text = "Currently searching:") ; rootLabelHeader.pack() теперь можно настроить метку   -  person Masoud    schedule 17.06.2019


Ответы (1)


rootLabelInfo = tkinter.Label(root, text = labelText.get(), width=90).pack() сохраняет упакованную объектную функцию (которая вернет None) в rootLabelInfo

Если вы планируете использовать виджет позже, сделайте это в две строки:

rootLabelInfo = tkinter.Label(root, text = labelText.get(), width=90)
rootLabelInfo.pack()

Другой метод использует StringVar и устанавливает атрибут textvariable:

import tkinter

root = tkinter.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

root.geometry("500x50" + "+" + str(screen_width - 520) + "+" + str(screen_height - 140))
root.title("POE Price Checker")
rootLabelHeader = tkinter.Label(root, text = "Currently searching:").pack()

labelText = tkinter.StringVar()
labelText.set("Nothing")
print(labelText.get())
rootLabelInfo = tkinter.Label(root, textvariable = labelText, width=90).pack()

labelText.set("New String")
print(labelText.get())

#root.after(1000, ListenToInput)
root.mainloop()
person tgikal    schedule 17.06.2019