【问题标题】:Python Tkinter after() Only Executing OncePython Tkinter after() 只执行一次
【发布时间】:2014-03-22 18:00:37
【问题描述】:

看起来应该如此简单的事情给了我很大的麻烦。我有一个 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 版本,不要判断我没有发言权哈哈。感谢您的所有帮助!

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    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)排队一次。每the docs:

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

    【讨论】:

    • 有道理!我知道这很简单!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 2019-06-04
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多