【发布时间】:2021-04-01 02:01:33
【问题描述】:
我想让一个小方块每 3 秒向左移动 10 个像素,我的代码如下。我不确定为什么它只移动一次。一些帮助将不胜感激!
import tkinter as tk
import time
root = tk.Tk()
WIDTH = HEIGHT = 400
x1 = y1 = WIDTH / 2
canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT)
canvas.pack()
c1 = canvas.create_rectangle(x1, y1, x1 + 10, y1 + 10)
c2 = canvas.create_rectangle(x1, y1, x1 + 10, y1 + 10)
def draw_rect():
global c2
canvas.delete(c2)
c2 = canvas.create_rectangle(x1, y1, x1 + 10, y1 + 10, fill="green")
def del_rect():
canvas.delete(c1)
#canvas.create_rectangle(x1, y1, x1 + 10, y1 + 10, fill="white", opacity=0.5)
while 1:
root.update()
time.sleep(3)
del_rect()
x1 -= 10
draw_rect()
root.mainloop()
【问题讨论】:
-
您能否详细说明“不起作用”的含义?
-
实际上矩形被移动了(尽管它们不是同一个矩形),因为窗口上显示的最终矩形被绿色填充(初始矩形没有被填充)。如果您在
time.sleep(3)之前添加root.update(),您将看到移动。 -
谢谢!在使用您的建议后,我设法看到它移动了一次。我希望看到它不断地移动。正如我在上面更新的那样,我将代码的底部 5 行放在 while 循环中,但它仍然只移动一次。
-
root.mainloop()在窗口关闭之前不会返回。摆脱那条线。请注意,此方法的 GUI 不会非常响应,因为它会一次完全冻结 3 秒。您想改用.after()来安排未来的活动。 -
canvas 具有
move()功能 - 因此您不必删除矩形并重新创建它。
标签: python tkinter tkinter-canvas