在一个类中,在一个函数中,我正在创建一个 Tkinter 画布。这个函数正在被另一个类调用,我想让 Tkinter 窗口弹出 30 秒然后自行关闭。我有它的电话
master.mainloop()
time.sleep(30)
master.destroy()
但我得到一个错误
“elf.tk.call('destroy',self._w)_tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁”
那么我怎样才能让它自己关闭呢?
不要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()
这里的问题是mainloop()
直到 GUI 关闭才返回。
因此,在 GUI 关闭并自行销毁30 秒后,您尝试将其销毁。显然这失败了。
但是你不能只在主循环中移动sleep
anddestroy
调用,因为如果你sleep
在主循环的中间,GUI 将冻结。
因此,您需要某种不会停止主循环的计时器。tkinter
包括after
用于该目的的方法。这个答案给出了一个使用它的详细例子。