【问题标题】:can not update label text无法更新标签文本
【发布时间】: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


【解决方案1】:

其实只是我自己想出来的。工作代码现在如下所示:

from tkinter import *
import time

root = Tk()
root.title("Blank")
root.geometry("480x240")

label = Label(
    root,
    text = " ",
    font = ("Arial", 42)
)

label.pack(fill = BOTH, expand = True)

def changeString1():
    label.config(text = "Test 1")
    label.after(1000, changeString2)

def changeString2():
    label.config(text = "Test 2")
    label.after(1000, changeString1)


changeString1()
root.mainloop()

再次,因为我是 tkinter 的新手,我不知道这是否是一个可接受的解决方案,但它有效,所以我很高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多