python 3 tkinter:如何将 .after() 添加到图形

python 3 tkinter: how to add .after() to graphics

我正在尝试制作一个慢慢变大的圆圈,为此我需要添加延迟。我尝试使用 time.sleep(),但发现它不起作用,我需要使用 .after()。我试过制作一个制作圆圈的功能,但没有奏效。我试过在创建椭圆之前添加一个 lambda,但这也没有用。无论如何,我可以在新圈子建立之前增加延迟吗? 谢谢

我的代码:-

from tkinter import *
root = Tk()

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

oval = c.create_oval(0, 0, 1, 1)

for x in range(2, 200, 5):
    c.delete(oval)
    root.after(100, oval = c.create_oval(0, 0, x, x))

root.after() 需要 ms 延迟和函数到 运行 在该延迟之后。你想要做的是在延迟 运行 之后,一个参数为 x (圆的半径)的函数。这个问题是你不能要求它运行一个有输入的函数。

要解决这个问题,您可以使用更新函数,然后使用全局变量来设置圆的半径等。

这对我有用:

from tkinter import *
root = Tk()

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

oval = c.create_oval(0, 0, 1, 1)
r = 2

def update():
    global r, oval
    if x < 200:
        x += 5
    c.delete(oval)
    oval = c.create_oval(0, 0, r, r)
    root.after(100, update)

update()
root.mainloop()

我还在您的 canvas 中添加了 highlightthickness = 0 选项,否则坐标系不匹配,您的圆圈将溢出 canvas。