【发布时间】:2022-01-07 00:46:27
【问题描述】:
我编写了一个带有动画的 tkinter 脚本,在 Xubuntu 上运行良好,但是当我在 Mac 上运行它时,动画不起作用。这是一个演示问题的小脚本:
import tkinter as tk
from time import sleep
root = tk.Tk()
canvas = tk.Canvas(root, height=200, width = 200)
canvas.pack()
this = canvas.create_rectangle(25,25, 75, 75, fill='blue')
that = canvas.create_rectangle(125, 125, 175, 175, fill = 'red')
def blink(event):
global this, that
for _ in range(9):
canvas.itemconfigure(this, fill='red')
canvas.itemconfigure(that, fill = 'blue')
canvas.update_idletasks()
sleep(.4)
this, that = that, this
canvas.bind('<ButtonRelease-1>', blink)
root.mainloop()
这会在画布上绘制一个红色方块和一个蓝色方块。当用户单击画布时,方块会反复切换颜色。在 Xubuntu 上,它按预期工作。
在 Mac 上,当我单击画布时,我得到了旋转的沙滩球,几秒钟后,我们看到方块已经切换了颜色,因为它们在代码中切换了奇数次。
在我看来 update_idletasks 不起作用。有没有办法解决这个问题?我在 Big Sur 上运行带有 Tk 8.6 的 python 3.9.5。
【问题讨论】:
-
无论如何都要避免使用
sleep(),而是与after()集成 -
@CoolCloud 好点。自从我上次做这样的事情以来已经有很长时间了。