解决这个问题?我正在运行此代码,窗口已创建,但在控制台中出现错误消息。我认为问题是"""循环没有终止,但窗口已被破坏。
代码:
import Tkinter as tk
import time
class App():
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(text="")
self.label.pack()
self.update_clock()
self.root.mainloop()
def update_clock(self):
now = time.strftime("%H:%M:%S")
self.label.configure(text=now)
self.root.after(1000, self.update_clock)
app=App()
控制台中的消息:
invalid command name "66120320callit"
while executing
"66120320callit"
("after" script)
对不起我在第一篇文章中的小信息。我正在使用Spyder IDE,并且在spyder控制台中看到错误,其中反复运行我的代码。我在python bug跟踪器中找到的这个bug的描述是" wait_variable在退出时挂起"
答案 0 :(得分:4)
如果你破坏窗户,那么"之后"已安排的作业可能会运行。如果窗口被销毁并且此作业与已删除的窗口小部件交互,则会出现此错误。
你可以在代码周围放置一个try
并忽略这样的错误,在尝试配置之前检查窗口是否存在,或者在主窗口被销毁时放入一个处理程序以删除任何挂起的& #34;后"作业。
答案 1 :(得分:0)
背景
我也遇到了这些“错误”。它们不是实际的例外,只是让他们讨厌在运行单元测试时看到终端中的垃圾邮件。
我尝试了很多事情,包括覆盖after
中的tkinter.Tk
方法以跟踪所有排队方法,然后在以如下方式调用tkinter.Tk.after_cancel()
之前自动调用tkinter.Tk.destroy()
: @GabrielStaples评论了。
所以即使正在调用after
的时候没有排队的destroy()
方法,我也遇到了这些错误。
我的解决方案
对我有用的是调用tkinter.Tk.quit()
而不是destroy()
破坏窗口。我读到quit()
不会停止mainloop
,但看起来还不错。由after
排队的任何方法都不会在调用quit()
之后被调用。
也许有人可以解释我是否知道的任何后果
答案 2 :(得分:-1)
我遇到了这个问题,因为我的模块名为“setup”,我还有一个setup.py文件。在调用setup.py somecommand时,您将获得“无效命令名称'somecommand'”。