如何在没有延迟的循环上刷新Tkinter显示

时间:2018-02-20 16:55:44

标签: python python-3.x tkinter lag

我试图创建一个简单的程序来监控在Tkinter窗口中显示的数据并每秒刷新一次。我正在使用的方法在程序运行时在刷新周期中产生不断增加的延迟。

这是计数器形式的方法的超简化表示。虽然循环以每循环一秒的预期速率开始,但即使在几分钟后循环时间也明显变慢。任何消除这种滞后积累的建议都将受到高度赞赏。非常感谢!

from tkinter import *
i=0
root = Tk()
root.title("Simple Clock")
root.configure(background="black")

def Cycle():
    global i
    Label(root, text="------------------------", bg="black", fg="black").grid(row=0, column=0, sticky=W)
    Label(root, text = i, bg="black", fg="gray").grid(row=0, column=0, sticky=W)
    i += 1
    root.after(1000,Cycle)

root.after(1000,Cycle)    
root.mainloop()

1 个答案:

答案 0 :(得分:1)

每次调用都停止创建新对象。相反,只更新更改的部分。对于上面的代码,它将更新第二个标签的文本:

from tkinter import *

def Cycle():
    global i
    labels[1]['text'] = i
    i += 1
    root.after(1000,Cycle)

i=0
root = Tk()
root.title("Simple Clock")
root.configure(background="black")
labels = list()
labels.append(Label(root, text="------------------------", bg="black", fg="black"))
labels.append(Label(root, bg="black", fg="gray"))
for j in range(len(labels)):
    labels[j].grid(row=0, column=0, sticky=W)
root.after(1000,Cycle)    
root.mainloop()