无法在不再次调用 pack() 的情况下更新 Python Tkinter 中的标签文本

Unable to update Label text in Python Tkinter without calling pack() again

from tkinter import *
from tkinter.ttk import *

root = Tk()
first_run = True


def update(txt):
    global first_run
    text1 = Label(root, text='')
    if first_run:
        text1.pack()
    text1['text'] = txt
    first_run = False

update('1')
update('2')
update('3')
root.mainloop()

当我运行这个时,文本停留在'1',下面的2个函数调用被忽略。我发现只有当我再次使用 pack() 时它才会更新,但它会创建一个重复的标签,我不希望那样。

当然,我知道我应该使用 StringVar,但我一直在将此方法用于所有其他小部件(按钮、标签框架等)并且它们都有效。我不知道为什么这个特殊情况不起作用。

运行 Python 3.9.9 Windows 11

您不是在更新标签,而是在每次调用该函数时创建一个新标签。要更新任何小部件,请使用 configure 方法。为此,您需要在函数外部创建标签(或者,将其保留在函数中但添加逻辑以便仅创建一次)。通常最好在函数外创建,这样函数只负责更新。

from tkinter import *
from tkinter.ttk import *

root = Tk()

def update(txt):
    text1.configure(text=txt)

text1 = Label(root, text='')
text1.pack()

update('1')
update('2')
update('3')
root.mainloop()

注意:由于您在绘制 window 之前多次调用您的函数,因此您只会看到最终值。这个网站上有很多解决方案。在不了解您的真实程序的更多信息的情况下,很难推荐该问题的最佳解决方案。