【发布时间】:2018-08-25 22:59:39
【问题描述】:
我有一个程序可以更新(完整的图像重新创建,即旋转图像),然后更改 tkinter.canvas.image,然后调用 canvas.updatestats() 以强制更改屏幕。 time.sleep(0.0001) 被调用并且过程重复自身。
直到鼠标指针变为一个蓝色的小圆圈,并且在蓝色圆圈周围有一个浅色条,它才能完美运行。如果我移动鼠标指针,圆圈会相应移动。可能 30 秒后,圆圈返回到鼠标指针,屏幕立即变为运行 30 秒后的样子(此时屏幕 100% 正确运行 30 秒)。然而,在蓝色圆圈出现期间,屏幕不再更新。我怀疑可能是垃圾收集已经开始并导致 tkinter 正常工作但屏幕更新被暂停。这需要一段时间才能开始,但之后经常发生。
我尝试导入 gc。然后执行 gc.disable() 但这没有帮助。
有人确切知道为什么会这样吗?
有没有办法阻止这种情况发生?
我的程序能否确定正在停止屏幕更新,因此我可以暂停屏幕更新直到完成?
【问题讨论】:
-
不知道你的代码是什么样子很难说。您可以发布一个重现此问题的minimal reproducible example 吗?顺便说一句,在 GUI 程序中调用
time.sleep通常不是一个好主意,因为这会使 everything 进入睡眠状态,因此 GUI 无法自行更新或响应用户输入。我猜 0.1 毫秒的延迟不会造成任何伤害,OTOH,.sleep如果系统繁忙,睡眠时间可能会比请求的时间长。 -
不,我不能。仅仅为了设置达到这一点所需的所有数据结构,可能需要大约一千行代码。
标签: python tkinter garbage-collection tkinter-canvas mouse-cursor