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 的 Tk.after() 方法中使用 async/await 关键字