我正在使用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会这样做,我会非常感谢你的指导。感谢。
答案 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()