我有一个非常基本的Tkinter应用程序,我试图设置为自动刷新。我正在使用threading.Timer来触发一个名为go的函数,在该函数结束时cocalls计时器将其重置为再次运行。
def SetTimer():
t=threading.Timer(5,go())
t.start
SetTimer()
我下午大部分时间都在努力解决这个问题,但我似乎无法弄清楚我做错了什么。根据我读过的其他问题,我明白每个实例都会使用计时器创建一个单独的线程,但为什么不等待在触发函数之前经过的时间。
答案 0 :(得分:4)
使用:
t=threading.Timer(5,go)
请注意go
而不是go()
。括号告诉Python调用该函数。相反,go
是一个函数对象。功能是"一流" Python中的对象;它们可以像任何其他对象一样传递给函数。
Python在调用函数之前评估函数的参数。因此,在调用go()
之前,使用go
调用threading.Timer
。 go()
返回的值会发送到Timer
,这不是您想要的。
请注意,应该从单个线程调用所有Tkinter UI代码。出于这个原因,使用Tkinter的root.after
方法可能是您想要做的更好的选择。 after
方法计划由Tkinter mainloop
调用的函数。以下是使用after
的一些示例: