tkinter GUI 不会每 10 秒更新一次标签并且不会关闭 [重复]

Posted

技术标签:

【中文标题】tkinter GUI 不会每 10 秒更新一次标签并且不会关闭 [重复]【英文标题】:tkinter GUI does not update Label every 10 secs and won't close [duplicate] 【发布时间】:2021-10-16 15:20:40 【问题描述】:

我是 Python 和 tkinter 的新手。下面我做了一个非常简短的程序,其中 Tkinter GUI 中的标签应该每 10 秒更新一次。可惜它没有这样做。

有人能解释一下为什么不请吗?另外,如果我点击右上角的小“x”,程序不会像预期的那样干净地停止。

from tkinter import *
import time

root = Tk()
root.title("P2Server")
var = StringVar()
label = Label( root, textvariable = var)
var.set("This is the start string - should be overwritten every 10 secs")
label.pack()

def startProcess():
    UPDATE_PERIOD = 10 #seconds
    startTime = time.time();
    cntr = 1
    while True:
        print("Loop " + str(cntr))
        var.set("Loop " + str(cntr))
        label.pack()
        cntr = cntr + 1
        time.sleep(UPDATE_PERIOD - ((time.time() - startTime) % UPDATE_PERIOD))

root.after(100, startProcess)
root.mainloop()

【问题讨论】:

【参考方案1】:

试试这个。不要在tkinter 中使用while 循环。 mainloop 是一种被中断的循环。看看after()

def startProcess(cntr):
    var.set("Loop " + str(cntr))
    
    root.after(10000,startProcess,cntr+1)

root.after(100, startProcess,1)
root.mainloop()

【讨论】:

【参考方案2】:

您不应在tkinter GUI 中使用time.sleep()。用起来会好很多

root.after(milliseconds, callback)

在一定时间后调用你的函数。

【讨论】:

以上是关于tkinter GUI 不会每 10 秒更新一次标签并且不会关闭 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter + matplotlib 动画填充内存

在 tkinter 的 Tk.after() 方法中使用 async/await 关键字

使用 tkinter 进行多处理不会产生多个 GUI

如何在Python中更新GUI窗口?

单击后更新按钮的位置? (Tkinter Python GUI)

怎样使用java swing画一个表格,把输出显示到表格上,而且每10秒自动刷新一次