【问题标题】:Python Threading.Timer is calling command without waitingPython Threading.Timer 无需等待即可调用命令
【发布时间】:2014-10-03 20:25:26
【问题描述】:

我有一个非常基本的 Tkinter 应用程序,我试图将其设置为自动刷新。我正在使用 threading.Timer 来触发一个名为 go 的函数,该函数最后会调用计时器以将其重置为再次运行。

def SetTimer():
    t=threading.Timer(5,go())
    t.start
    SetTimer()

我下午的大部分时间都在试图解决这个问题,但我似乎无法弄清楚我做错了什么。根据我读过的其他问题,我知道每个实例都会使用计时器创建一个单独的线程,但为什么它不等待时间过去再触发函数。

【问题讨论】:

  • 如果你使用的是Tkinter,使用线程自动刷新是解决问题的错误方法。您可以通过调用根小部件(或任何小部件)的after 方法来安排将来运行的函数来避免线程的复杂性。
  • @BryanOakley 我会调查一下,谢谢!

标签: python multithreading timer


【解决方案1】:

用途:

t=threading.Timer(5,go)

注意go 而不是go()。括号告诉 Python 调用该函数。相反,go 是一个函数对象。函数是 Python 中的“一等”对象;它们可以像任何其他对象一样传递给函数。

Python 在调用函数之前评估函数的参数。因此,在调用threading.Timer 之前,使用go() 调用go。 go() 返回的值被发送到Timer,这不是你想要的。


请注意,所有 Tkinter UI 代码都应从单个线程调用。出于这个原因,使用 Tkinter 的 root.after 方法可能是您想要做的更好的选择。 after 方法安排一个函数被 Tkinter 的 mainloop 调用。以下是一些使用after 的示例:

【讨论】:

  • 这很有意义!感谢您的帮助!
猜你喜欢
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
相关资源
最近更新 更多