执行时命令名无效(""脚本后)

时间:2014-10-02 20:19:06

标签: python tkinter python-2.x

解决这个问题?我正在运行此代码,窗口已创建,但在控制台中出现错误消息。我认为问题是"""循环没有终止,但窗口已被破坏。

代码:

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在退出时挂起"

3 个答案:

答案 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'”。