0

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

问题:

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

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() 进行无限循环,这确实会在主窗口(根)中显示闪烁的矩形;

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 为什么会这样,我将非常感谢您的指导。谢谢。

4

1 回答 1

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()
于 2015-01-04T19:09:01.387 回答