Python线程。计时器正在不等待地调用命令
我有一个非常基本的Tkinter应用程序,我正试图将其设置为自动刷新。我正在使用threading.Timer触发一个名为go的函数,在该函数的末尾调用计时器以重置它以再次运行Python线程。计时器正在不等待地调用命令,python,multithreading,timer,Python,Multithreading,Timer,我有一个非常基本的Tkinter应用程序,我正试图将其设置为自动刷新。我正在使用threading.Timer触发一个名为go的函数,在该函数的末尾调用计时器以重置它以再次运行 def SetTimer(): t=threading.Timer(5,go()) t.start SetTimer() 我花了下午的大部分时间试图解决这个问题,但我似乎不知道我做错了什么。根据我读到的其他问题,我了解到每个实例都会使用计时器创建一个单独的线程,但为什么不在触发函数之前等待时间的
def SetTimer():
t=threading.Timer(5,go())
t.start
SetTimer()
我花了下午的大部分时间试图解决这个问题,但我似乎不知道我做错了什么。根据我读到的其他问题,我了解到每个实例都会使用计时器创建一个单独的线程,但为什么不在触发函数之前等待时间的流逝呢。使用:
t=threading.Timer(5,go)
注意开始,而不是开始。括号告诉Python调用该函数。相反,go是一个函数对象。函数是Python中的一级对象;它们可以像任何其他对象一样传递给函数
Python在调用函数之前对函数的参数求值。因此,在调用threading.Timer之前,使用go调用go。go返回的值被发送到计时器,这不是您想要的
请注意,所有Tkinter UI代码都应该从单个线程调用。因此,使用Tkinter的root.after方法可能是更好的选择。after方法调度Tkinter的主循环调用的函数。以下是使用after的一些示例:
如果您使用的是Tkinter,那么使用线程自动刷新是解决问题的错误方法。您可以通过调用根小部件或任何小部件的after方法来安排将来运行的函数,从而避免线程的复杂性。@BryanOakley我会研究一下的,谢谢!这很有道理!谢谢你的帮助!