在一个类中,在一个函数中,我正在创建一个Tkinter Canvas。这个函数正被另一个类调用,我希望Tkinter窗口弹出30秒然后自行关闭。我打电话给
master.mainloop()
time.sleep(30)
master.destroy()
但是我收到了错误
“elf.tk.call('destroy',self._w) _tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁“
那我怎么能把它靠近呢?
答案 0 :(得分:17)
请勿将time.sleep()
与tkinter一起使用。而是在要关闭的窗口小部件上调用函数after
。
这是最简单的例子:
import tkinter as tk
w = tk.Tk()
w.after(30000, lambda: w.destroy()) # Destroy the widget after 30 seconds
w.mainloop()
答案 1 :(得分:4)
这里的问题是在GUI关闭之前mainloop()
不会返回。
因此,在 GUI关闭并自行销毁之后30秒,您尝试销毁它。显然失败了。
但是你不能只在主循环中移动sleep
和destroy
调用,因为如果你在主循环中间sleep
,GUI将会冻结。
所以,你需要某种不会停止主循环的计时器。 tkinter
包含用于此目的的after
方法。 This answer给出了使用它的详细示例。