【发布时间】:2019-02-28 11:05:04
【问题描述】:
我正在尝试运行一个简单的 GUI,它每隔几秒就更改一次标签文本。我是使用 tkinter 的新手,不明白每件事是如何工作的,但从我在网上收集的信息来看,after() 方法应该调用我编写的函数来更改标签文本,但它不起作用? 任何帮助是极大的赞赏。
from tkinter import *
import time
root = Tk()
root.title("Blank")
root.geometry("480x240")
label = Label(
root,
text = "hello",
font = ("Arial", 42)
)
label.pack(fill = BOTH, expand = True)
def updater():
label.config(text = "Test 1")
time.sleep(1)
label.config(text = "Test 2")
root.mainloop()
root.after(2000, updater)
【问题讨论】:
-
永远不要在 GUI 程序中使用
time.sleep。这将阻塞主循环,从而阻止标签更新。但更重要的是,您的root.after在主循环结束之前不会执行 - 换句话说,直到您关闭窗口。 -
您可能应该将
time.sleep之后的label.config放在root.after内的lambda 函数中(像这样:root.after(1000, lambda: label.config(text = "Test 2")) -
我删除了 time.sleep() 并尝试使用 lambda 函数,但没有一个工作。在这一点上我真的很困惑,我不明白为什么它不起作用。
-
在@Aran-Fey 指示的呼叫
root.after之后,您是否将呼叫转移到root.mainloop()? -
好吧,在移动 .after() 调用后,它现在会更改标签文本。但现在我的另一个问题是如何让它不断地从一个字符串变为另一个字符串?
标签: python python-3.x tkinter