在 tkinter python 中执行(“after”脚本)时如何处理无效命令名称错误

我知道这个问题已经在这里被多次提出,而且我已经仔细考虑过所有这些问题。但我没有找到解决该问题的明确方法。我知道发生这个错误的原因。我知道使用后root.destroy(),还有一些工作需要完成等等。但我想知道如何停止那些“之后”的工作?其中一个人要求在代码中使用try/ 。accept但他没有展示如何使用它。那么您能为这个案例提供一个明确的解决方案吗?有什么办法可以消除这个错误吗?我请求您不要将此问题标记为重复,也不要删除此问题。这很重要,而且我没有其他来源可以得到答案。


invalid command name "2272867821888time"

    while executing

"2272867821888time"

    ("after" script)


富国沪深
浏览 131回答 1
1回答

四季花海

在执行调度的回调之前销毁窗口时会发生此错误after。为了避免这种问题,您可以存储调度回调时返回的 id,并在销毁窗口时取消它,例如使用protocol('WM_DELETE_WINDOW', quit_function).这是一个例子:import tkinter as tkdef callback():    global after_id    var.set(var.get() + 1)    after_id = root.after(500, callback)def quit():    """Cancel all scheduled callbacks and quit."""    root.after_cancel(after_id)    root.destroy()root = tk.Tk()root.pack_propagate(False)var = tk.IntVar()tk.Label(root, textvariable=var).pack()callback()root.protocol('WM_DELETE_WINDOW', quit)root.mainloop()此外,Tcl/Tk 有一个after info方法,不能通过 python 包装器直接访问,但可以使用调用root.tk.eval('after info')并返回 ids: 字符串'id1 id2 id3'。因此,跟踪所有 id 的另一种方法是使用:import tkinter as tkdef callback():    var.set(var.get() + 1)    root.after(500, callback)def quit():    """Cancel all scheduled callbacks and quit."""    for after_id in root.tk.eval('after info').split():        root.after_cancel(after_id)    root.destroy()root = tk.Tk()root.pack_propagate(False)var = tk.IntVar()tk.Label(root, textvariable=var).pack()callback()root.protocol('WM_DELETE_WINDOW', quit)root.mainloop()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python