在一定时间后自动关闭窗口
在一个类里,我有一个函数用来创建一个Tkinter的画布。这个函数是被另一个类调用的。我想让Tkinter的窗口弹出来显示30秒,然后自己关闭。我用的是
master.mainloop()
time.sleep(30)
master.destroy()
但是我遇到了一个错误
"elf.tk.call('destroy', self._w) _tkinter.TclError: 不能调用“destroy”命令:应用程序已经被销毁"
那么我该怎么让它自己关闭呢?
2 个回答
4
这里的问题是,mainloop()
这个函数在图形界面(GUI)关闭之前是不会返回的。
所以,在图形界面关闭并自我销毁后,过了30秒你再去尝试销毁它,这显然是失败的。
但是,你不能把 sleep
和 destroy
这两个调用放进主循环里,因为如果你在主循环中间使用 sleep
,图形界面就会卡住。
因此,你需要一种不会停止主循环的计时器。tkinter
提供了 after
方法,正是为了这个目的。这个回答 给出了使用它的详细示例。
26
不要在使用tkinter的时候用time.sleep()
。相反,应该在你想要关闭的组件上调用一个叫做after
的函数。
下面是一个最简单的例子:
import tkinter as tk
w = tk.Tk()
w.after(30000, lambda: w.destroy()) # Destroy the widget after 30 seconds
w.mainloop()