【发布时间】:2020-02-08 03:55:38
【问题描述】:
我正在使用 tkinter 在 python 中编写一个简短的应用程序。一切正常,除了意外暂停 - 它应该每秒生成两次事件,但通常它会在信号之间暂停 5 或 6 秒。我放了打印语句来查找延迟在哪里,发现它是以下语句:
self.frame.after(ms, self.tick_handler)
ms 是 500,所以这应该在 0.5 秒左右发送事件。通常它会这样做,但通常它会在 tick_handler() 收到信号之前挂起多达 5 或 6 秒。该程序非常简单,单个工作线程从单个队列接收所有输入,事件来自单个 tkinter 帧。 after() 语句在工作线程中。我试过关闭 gc (gc.disable()) 但这没什么区别。在我的计算机上,除此之外的活动很少。
如果我在暂停期间使用鼠标或键发送其他输入,则会立即处理,因此不会阻塞工作线程。看起来好像收到了信号请求但有一段时间没有触发。我知道我不能指望实时性能,所以 0.6 秒不会值得注意,但 6.0 秒?
这是我第一次使用 tkinter。我在事件处理方面有什么遗漏吗?
【问题讨论】: