【问题标题】:delay in setting 'after' function in python tkinter在 python tkinter 中设置'after'函数的延迟
【发布时间】: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。我在事件处理方面有什么遗漏吗?

【问题讨论】:

    标签: python events tkinter


    【解决方案1】:

    我认为你最后没有包含tkinter.mainloop()

    PS:我不确定...

    【讨论】:

    • 对不起,不是这样,代码确实运行正常,只是有延迟。我知道如果我可以制作一个简短的示例并包含一个完整的程序会更好,但是我尝试过的简短测试程序没有问题。
    • 谢谢,但包含的时间有点长,我仍然可以看到这种行为,但经过一些不相关的更改后,情况会好一些(3-4 秒而不是 5-6 秒)。该程序(多板俄罗斯方块)仅用于我自己的指导。如果这是一个已知的问题,我想知道,否则我会记录下来以体验并继续前进。
    • 有时它也会发生在我身上...我认为通过小部件tkinter.Button["command"] 调用它会有所帮助
    • 有趣。我会看看我是否可以从一个按钮内调用,尽管目前逻辑已经在工作线程中完成。我发现严重程度似乎随着组织而变化。此外,当我使用多个板(工作线程)运行时,每个都设置延迟后,它工作得更好。运行 2 个线程 3 分钟我只看到了 2 个 3 秒的延迟,运行一个单板将有 10 倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多