Python Tkinter after() 只执行一次
有些事情看起来应该很简单,但我却遇到了一些麻烦。我正在使用Tkinter做一个图形界面(GUI),想要定期更新它。具体来说,我是在一个画布上删除一些东西,然后再替换上去。不过在这里,我只是想打印一句话,证明我的after函数工作正常。当我放一个按钮并点击它时,一切都很好,但我想用after()函数自动执行这个操作。不过,我在让它正常工作上遇到了困难。
class app():
def __init__(self, frame):
self.pad = tk.Canvas(frame)
self.pad.create_window(10, 10, window=tk.Button(self.pad,command=update)
self.pack(fill="both")
#More Stuff
#Neither one worked
frame.after(1000,update)
#self.pad.after(1000,update)
def update(self):
print "Updating"
#More Stuff
if __name__=="__main__":
root = tk.TK()
app(root)
root.mainLoop()
当然,这不是完整的代码,但希望能让你明白我想做什么。所以当我点击按钮时,我能看到“Updating”(正在更新)这几个字出现。但是当我使用after函数时,它只在一开始出现一次,之后就再也没有了。我现在用的是Python 2.4.4,别笑我,我也没办法哈哈。感谢任何帮助!
1 个回答
7
在update
的最后加一个after
的调用:
def __init__(self, frame):
self.frame = frame
...
self.frame.after(1000, self.update)
def update(self):
...
self.frame.after(1000, self.update)
这就是after
的工作原理。它只会把回调函数(比如self.update
)放入队列一次。根据文档的说明:
每次调用这个方法时,回调函数只会被调用一次。如果想要持续调用这个回调函数,你需要在回调函数内部重新注册它自己。