我试图做一个逐渐变大的圆圈,为此,我需要增加一个延迟。我尝试使用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()


我还向画布中添加了选项highlightthickness = 0,因为否则坐标系统将不匹配,并且您的圈子将从画布中溢出。

10-02 02:54