Tin*_*nyT 8 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()
Run Code Online (Sandbox Code Playgroud)
控制台中的一条消息:
invalid command name "66120320callit"
while executing
"66120320callit"
("after" script)
Run Code Online (Sandbox Code Playgroud)
抱歉我在第一篇文章中提供了一些小信息。我正在使用 Spyder IDE,并且在间谍控制台中看到错误,其中重复运行我的代码。我在 python bug 跟踪器中找到的这个 bug 的描述为“wait_variable 在退出时挂起”
如果您销毁窗口,则任何已安排的“之后”作业都可以运行。如果窗口被破坏并且此作业与已删除的小部件交互,您将收到此错误。
您可以try在代码周围放置一个并忽略此类错误,在尝试配置窗口之前检查窗口是否存在,或者在主窗口被销毁时放置一个处理程序以删除任何挂起的“之后”作业。
长话短说:使用tkinter.Tk.quit()
背景
我也遇到了这些“错误”。它们并不是真正的例外,它们只是在运行单元测试时在终端中看到垃圾邮件而令人烦恼。
我尝试了很多事情,包括重写after方法以tkinter.Tk跟踪任何排队的方法,然后tkinter.Tk.after_cancel()在调用之前自动调用tkinter.Tk.destroy(),如 @GabrielStaples 评论的那样。
after因此,即使在调用时没有排队方法,我也会收到这些错误destroy()。
我的解决方案
对我有用的是调用tkinter.Tk.quit()销毁窗口而不是destroy(). 我读到这并quit()没有停止mainloop,但看起来还不错。任何排队的方法在after调用后都不会quit()被调用。
也许有人可以解释我不知道的任何后果(如果有的话)
| 归档时间: |
|
| 查看次数: |
9304 次 |
| 最近记录: |