Python 在特定时间段后退出tkinter窗口?

Python 在特定时间段后退出tkinter窗口?,python,tkinter,Python,Tkinter,我尝试了各种方法来关闭我在互联网上可以找到的tkinter窗口。我问这个问题的唯一原因是,尽管已经被问了很多次,我仍然无法让它起作用 基本上,我正在制作一个简单的“倒计时”游戏(如电视节目),其中包括一个30秒的大型tkinter“计时器”。数字正确向下滴答,但除非用户手动关闭窗口,否则程序将无法继续。显然,这首先违背了计时器的用途,但我如何在需要时使其自动关闭 下面是一个不起作用的非常简单的示例: # python 3.5.2 from tkinter import * root

我尝试了各种方法来关闭我在互联网上可以找到的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!
#python 3.5.2
从tkinter进口*
root=Tk()
根标题(“测试”)
root.mainloop()

#root.destroy()/root.quit()在您的代码中,您试图在调用
mainloop
后运行代码
mainloop
在销毁窗口之前不会返回,因此在此之后修改窗口的任何尝试都将失败,并出现“应用程序已销毁”错误

您正确地认为需要在
之后使用
来安排销毁,并且需要使用
销毁
来导致销毁。关于
之后的
要记住的重要一点是,必须给它一个函数的引用。如果需要将参数传递给函数,可以在调用后的
中将这些参数指定为附加参数

换言之:

root.after(1000, root.destroy())
与此完全相同:

result = root.destroy()
root.after(1000, result)
相反,您需要传递不带括号的
destroy
。在最简单的情况下,您的程序如下所示:

import tkinter as tk

root = tk.Tk()
root.after(10000, root.destroy)
root.mainloop()
如果要更新倒计时时钟,可以每秒调用自己的函数,并在倒计时结束时销毁窗口

下面是一个例子:

import tkinter as tk

def countdown(time):
    if time == -1:
        root.destroy()
    else:
        if time == 0:
            label.configure(text="BOOM")
        else:
            label.configure(text="time remaining: %d seconds" % time)

        root.after(1000, countdown, time-1)

root = tk.Tk()
label = tk.Label(root, width=30)
label.pack(padx=20, pady=20)
countdown(10)

root.mainloop()

我知道我不应该做多余的评论,但非常感谢!这完全奏效了——我不敢相信我以前没有找到这个解释!我没有将此标记为“有用”的唯一原因是我只获得1个声誉!+1无论如何!我一直在寻找一种跨平台的方法来测试我的代码是否在“headless”系统上运行,尝试这种方法而不捕获异常似乎是一种好方法。