【问题标题】:Python 3 tkinter: How to use .after() on canvas graphics? [duplicate]Python 3 tkinter:如何在画布图形上使用 .after()? [复制]
【发布时间】:2017-07-29 10:55:24
【问题描述】:

我正在尝试为随时间移动的圆圈制作动画,但我不知道如何在 Canvas 上使用 .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)

【问题讨论】:

    标签: python tkinter tkinter-canvas


    【解决方案1】:

    这是一个使用.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多