我试图做一个逐渐变大的圆圈,为此,我需要增加一个延迟。我尝试使用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,因为否则坐标系统将不匹配,并且您的圈子将从画布中溢出。