我已经尝试过各种方法来关闭可以在互联网上找到的tkinter窗口。我问这个问题的唯一原因是,尽管我已经问过很多次了,但我仍然无法解决这个问题。
基本上,我正在制作一个简单的“倒计时”游戏(如电视节目),其中涉及一个大型的30秒tkinter“计时器”。数字正确打勾,但是除非用户手动关闭窗口,否则程序将不会继续。显然,这首先破坏了计时器的用途,但是当我希望计时器自动关闭时,如何使它自动关闭呢?
这是一个不起作用的非常简单的示例:
# python 3.5.2
from tkinter import *
root = Tk()
root.title("Test")
root.mainloop()
# root.destroy() / root.quit() <== neither of these are effective
print("The window has now been closed") ## not unless the user crosses it off!
Run Code Online (Sandbox Code Playgroud)
我尝试使用“之后”方法。首先,我创建了执行销毁命令的过程“ window_closer()”之后,尝试了“ root.after(30000,destroy())”,然后以防万一,我尝试了“ root.after(30000,window_closer)”。我以为那没有任何区别。真可惜,因为我成功了,那真是太理想了。
我还尝试创建一个框架,然后“销毁”该框架,但是尽管它可能会禁用小部件,但实际上并没有关闭窗口(例如,将其划掉)。当我尝试'root.quit()'时,什么也没发生。使用“ root.destroy()”,我收到错误消息“ tkinter.TclError:无法调用“ destroy”命令:应用程序已被破坏”。显然,这与mainloop()有关,但是尽管谷歌搜索了它,并查看了其他人的答案,但我并没有真正得到它。
我想念什么吗?任何帮助将非常感激!
RE:验证 Toplevel() 的存在
我为用户设置了 15 秒的时间限制,因为他们选择要随机元音还是随机辅音 9 次,以形成随机字母列表。(我正在使用包含从其他人的答案中获得的 GUI 计时器的 Toplevel)。
如果他们按时管理,一个类似的计时器会出现在 ORIGINAL 窗口上,替换元音/辅音按钮(此时我已经销毁了),并且旧的 SEPARATE-window Toplevel 计时器被销毁。但是,我想进行第二次倒计时,因为它必须从 30 秒开始,在正确的时间开始,而不是在用户仍在选择字母期间在后台(在 VOWEL/CONSONANT 按钮后面)滴答作响。
如果这些都没有任何意义,那么这是不起作用的代码的基本轮廓。
# I tried to test if the the Toplevel timer had been destroyed (which happens as soon as the
# user has finished with the 9 letters). If so, I could then start the NEW 30-second timer.
import tkinter as tk
root = tk.Tk()
test = tk.Label()
# above: later, will test if a Label() widget counts as …
Run Code Online (Sandbox Code Playgroud)