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

时间:2017-07-29 07:01:50

标签: python python-3.x tkinter tkinter-canvas

我正在尝试制作一个慢慢变大的圆圈并且这样做我需要添加一个延迟。我尝试使用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))

1 个答案:

答案 0 :(得分:1)

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选项,否则坐标系不匹配,你的圆圈会溢出画布。