2017-07-29 75 views
1

我想要動畫一個隨時間推移的圓,但我不知道如何在Canvas上使用.after()在每次圓形更改位置之前添加一個延遲。有誰知道如何做到這一點? 謝謝。Python 3 tkinter:如何在畫布圖形上使用.after()?

我的代碼(我已經把.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) 

回答

2

下面是使用.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