一段时间后自动关闭窗口

时间:2013-03-09 01:44:51

标签: python tkinter

在一个类中,在一个函数中,我正在创建一个Tkinter Canvas。这个函数正被另一个类调用,我希望Tkinter窗口弹出30秒然后自行关闭。我打电话给

master.mainloop()
time.sleep(30)
master.destroy() 

但是我收到了错误

  

“elf.tk.call('destroy',self._w)   _tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁“

那我怎么能把它靠近呢?

2 个答案:

答案 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秒,您尝试销毁它。显然失败了。

但是你不能只在主循环中移动sleepdestroy调用,因为如果你在主循环中间sleep,GUI将会冻结。

所以,你需要某种不会停止主循环的计时器。 tkinter包含用于此目的的after方法。 This answer给出了使用它的详细示例。