Python Tkinter after()只执行一次

时间:2014-03-22 18:00:37

标签: python user-interface tkinter

看起来应该如此简单的东西给了我一个很大的问题。我有一个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()

当然,这不是完整的代码,但希望看到我想要做的事情就足够了。因此,当我点击按钮时,我会看到"更新"出现。但是当我使用后功能时,它会在开始时出现,而不会再出现。我也使用Python 2.4.4版,不要判断我没有发言权哈哈。感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

after

结束时拨打update
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)进行一次排队。每the docs

  

每次调用此方法时,只会调用一次回调。至   继续调用回调,你需要在里面重新注册回调   本身