【问题标题】:tkinter GUI does not update Label every 10 secs and won't close [duplicate]tkinter GUI 不会每 10 秒更新一次标签并且不会关闭 [重复]
【发布时间】: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()

【问题讨论】:

    标签: python tkinter


    【解决方案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)
      

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

      【讨论】:

        猜你喜欢
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多