我知道这个问题已经在这里被多次提出,而且我已经仔细考虑过所有这些问题。但我没有找到解决该问题的明确方法。我知道发生这个错误的原因。我知道使用后root.destroy()
,还有一些工作需要完成等等。
但我想知道如何停止那些“之后”的工作?
其中一个人要求使用try
/accept
在代码中。但他没有展示如何使用它。
那么您能为这个案例提供一个明确的解决方案吗?有什么办法可以消除这个错误吗?
我请求您不要将此问题标记为重复,也不要删除此问题。这很重要,而且我没有其他来源可以得到答案。
invalid command name "2272867821888time"
while executing
"2272867821888time"
("after" script)
在使用以下命令安排回调之前销毁窗口时会发生此错误after
被执行。为了避免这种问题,您可以存储调度回调时返回的 id 并在销毁窗口时取消它,例如使用protocol('WM_DELETE_WINDOW', quit_function)
.
这是一个例子:
import tkinter as tk
def 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')
并返回一串 id:'id1 id2 id3'
。因此,跟踪所有 id 的另一种方法是使用:
import tkinter as tk
def 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)