Python 3 tkinter:如何在画布图形上使用.after()?

时间:2017-07-29 10:55:24

标签: python tkinter tkinter-canvas

我正在尝试动画一个随时间移动的圆圈,但我不知道如何在.after()上使用Canvas在圆圈每次更改位置之前添加延迟。有谁知道如何做到这一点? 感谢。

我的代码(我已将.sleep()放在我希望延迟的地方):

from tkinter import *
import time
root = Tk()

c = Canvas(root, width = 500, height = 500)
c.pack()

oval = c.create_oval(0, 0, 0, 0)
for x in range(2, 50, 5):
    time.sleep(0.1)
    c.delete(oval)
    oval = c.create_oval(x+50, x+50, x+50, x+50)

1 个答案:

答案 0 :(得分:3)

以下是使用从代码派生的.after的简单示例。如您所见,.after方法需要提供一个在指定的延迟后调用的函数,因此您需要将更改包装在函数中。

import tkinter as tk
root = tk.Tk()

canvas = tk.Canvas(root, width = 500, height = 500)
canvas.pack()
radius = 10
bbox = (-radius, -radius, radius, radius)
oval = canvas.create_oval(*bbox)

def move_oval():
    canvas.move(oval, 1, 1)
    canvas.after(20, move_oval)

# Start moving!
move_oval()

root.mainloop()

如果您想查看更复杂的示例,请查看tk_orbit.py