user interface - Python Tkinter after() Only Executing Once



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

当然,这不是完整的代码,但希望它有足够的意义,看看我正在尝试做什么。所以当我点击按钮时,我看到"更新"字样出现了。但是当我使用after函数时,它在开始时出现一次,然后再也不会出现。我也在Python 2.4.4版本,不要判断我没有发言权,哈哈。感谢所有的帮助!

update的末尾呼叫after:

def __init__(self, frame):       
    self.frame = frame
    ...
    self.frame.after(1000, self.update)
def update(self): 
    ...
    self.frame.after(1000, self.update)

这是工作后的方式。它只对回调(例如self.update)进行一次排队。Per the docs:

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

相关内容

  • 没有找到相关文章

最新更新