无法在不再次调用 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 之前多次调用您的函数,因此您只会看到最终值。这个网站上有很多解决方案。在不了解您的真实程序的更多信息的情况下,很难推荐该问题的最佳解决方案。
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 之前多次调用您的函数,因此您只会看到最终值。这个网站上有很多解决方案。在不了解您的真实程序的更多信息的情况下,很难推荐该问题的最佳解决方案。