我目前与
curio
我正在努力改变
tkinter
的回调,使其与异步代码兼容。我已经解决了大部分问题,事件等待,协议,但唯一剩下的是窗口更新。
这个
tkinter.Tk.update
方法在调整窗口大小时阻塞。这破坏了我的异步代码,因为一切都必须在没有阻塞的情况下运行。我不能在另一个线程中运行这个,就像
this answer notes
.
下面是一些测试代码,它们将确定调用的时间
update()
拿。
import tkinter
from time import monotonic
window = tkinter.Tk()
try:
while True:
started = monotonic()
window.update() # This is the blocking call
delta = monotonic() - started
if delta >= 0.5:
print(f'{func.__name__} took {delta} seconds to run')
except tkinter.TclError:
# The window is closed
pass
您可以尝试调整窗口大小一秒钟,然后打印功能就会运行。如果你离开它,什么也不会发生。这意味着事件循环总是在处理来自调整大小的事件。
注意:在屏幕上移动鼠标不会触发事件,但只需稍加修改即可检查事件
<Motion>
事件发生了
方法
比
<Configure>
事件。
我现在可以通过运行
tkinter.Tk.resizable(False, False)
以防止调整大小。我非常希望在没有这种限制的情况下工作,我很想知道为什么通话会受阻。也许事件循环正在内部处理一些事件,但我不确定。