Tkinter - 在画布上创建闪烁的图形?

时间:2015-01-04 12:01:33

标签: python-2.7 tkinter tkinter-canvas

我正在使用Tkinter(2.7)尝试创建绘制的有限循环,然后擦除画布小部件上的矩形,就像它的闪烁一样。经过几天尝试我能找到的一切,我不得不寻求帮助。

问题:

下面的代码似乎创建并删除了程序中的矩形,但没有在主窗口(root)中显示它。

from Tkinter import *
root = Tk()

def make():
    canvas.create_rectangle(20,20,60,60,fill="pink")
    root.after(1000)

def unmake():
    canvas.delete(ALL)
    root.after(1000)   

def loop():
    count = 0 
    while count < 5:
        make()
        unmake()
        count += 1

canvas = Canvas(root,width=100,height=100)
canvas.pack()  

loop()

root.mainloop()

我尝试过的事情:

如果我在make()和unmake()函数中放入打印指令,则这些打印间隔为1秒,所以我知道.after()方法正在工作。

如果我使用make()函数进行无限循环调用unmake()并再次取消调用make(),则会在主窗口(root)中显示闪烁的矩形;

def make():
    box = canvas.create_rectangle(20,20,60,60,fill="pink")
    root.after(1000,unmake)

def unmake():
    canvas.delete(ALL)
    root.after(1000,make) 

如果有人知道为什么Tkinter会这样做,我会非常感谢你的指导。感谢。

1 个答案:

答案 0 :(得分:0)

after()不会在发布的代码中调用任何函数。以下代码说明了基本概念

from Tkinter import *
root = Tk()

def make():
    canvas.create_rectangle(20,20,60,60,fill="pink")
    root.after(1000, unmake)

def unmake():
    canvas.delete(ALL)
    root.after(1000, make)   

canvas = Canvas(root,width=100,height=100)
canvas.pack()  

make()

root.mainloop()