我有一个学校项目,在Tkinter窗口打开的所有时间里我都需要循环。
我尝试使用after_idle()
和after
方法,但这些都不起作用。
我在短测试代码上遇到同样的问题:
from Tkinter import *
i = 0
root = Tk()
root.geometry("200x200")
l = Label(root, width = 200, height = 150)
l.pack(side = 'top')
b = Button(root, width = 10, height = 10)
b.pack()
def a():
global i
i+=1
l.configure(text = i)
root.after(10, a())
root.mainloop()
答案 0 :(得分:1)
root.after(10, a())
非常接近你想要的,但第二个参数a()
立即运行a
并使用其返回值(None
)。
您想引用a
,而不是运行它。使用root.after(10, a)
此外,正如Bryan Oakley在评论中指出的那样,你需要一些方法来继续安排a
。 root.after
仅调度函数运行一次。最简单的方法是将root.after(10, a)
添加到函数本身:
def a():
global i
root.after(10, a) # re-schedule to run again
i += 1
l.configure(text=i)