相关文章推荐
温暖的卡布奇诺  ·  Tkinter教程28:ttk.Style( ...·  10 小时前    · 
活泼的石榴  ·  番外篇: ...·  11 月前    · 
鬼畜的山羊  ·  python 3.x - Why does ...·  2 年前    · 

如何启动一个自毁的 Python/Tkinter 对话框?

5 人关注

好的,我想把一个Python/Tkinter对话框放在一起,显示一个简单的信息,并在N秒后自毁。有什么简单的方法可以做到这一点吗?

python
tkinter
Stephen Gross
Stephen Gross
发布于 2009-12-17
2 个回答
luc
luc
发布于 2009-12-17
已采纳
0 人赞同

你可以使用 after 函数在延迟过后调用一个函数,使用 destroy 来关闭窗口。

下面是一个例子

from Tkinter import Label, Tk
root = Tk()
prompt = 'hello'
label1 = Label(root, text=prompt, width=len(prompt))
label1.pack()
def close_after_2s():
    root.destroy()
root.after(2000, close_after_2s)
root.mainloop()

更新:之后的文档串说。

在给定时间后调用一次函数。 MS指定了以毫秒为单位的时间。 FUNC给出应被调用的函数。 附加参数作为函数调用的参数给出。 返回标识符,用after_cancel取消调度。

谢谢 -- 非常有帮助!你能给我指出after()函数的参考文件吗?
另外,下一步是更新标签的内容。这方面有什么诀窍吗?我试过'label1.set('new text');label1.pack()',但没有效果......
对你可以调用root.after()的次数有什么限制吗?我写了'root.after(1000, do_this); root.after(2000, do_that)',它似乎只执行后一个函数。我是不是做错了什么?
不,你可以调用 root.after() 的次数是没有限制的。不幸的是,没有看到你的代码,就不可能说你做错了什么。
Corey Goldberg
Corey Goldberg
发布于 2009-12-17
0 人赞同

你也可以用一个线。
这个例子使用一个定时器,在指定的时间后调用destroy()。

import threading
import Tkinter
root = Tkinter.Tk()
Tkinter.Frame(root, width=250, height=100).pack()
Tkinter.Label(root, text='Hello').place(x=10, y=10)