在python中关闭tkmessagebox一段时间后

时间:2015-05-14 10:57:06

标签: python python-2.7 tkinter tk tkmessagebox

我正在开发一个自动考勤系统,当学生扫描他的RFID标签时,会记录他的出勤情况,同时使用tkmessagebox弹出窗口显示欢迎信息。用户将无法控制鼠标或键盘,我希望将消息显示2秒钟并删除消息框。有没有办法可以关闭提议的tkmessagebox弹出窗口?

3 个答案:

答案 0 :(得分:1)

我不认为可以使用tkMessageBox来完成,因为这会创建一个模式对话框,并且您无法访问小部件ID(因此可以通过编程方式销毁它)。

但是创建自己的顶级窗口并添加一些欢迎消息并在一段时间后关闭它并不难。像这样:

from Tkinter import *

WELCOME_MSG = '''Welcome to this event.

Your attendance has been registered.

Don't forget your free lunch.'''
WELCOME_DURATION = 2000

def welcome():
    top = Toplevel()
    top.title('Welcome')
    Message(top, text=WELCOME_MSG, padx=20, pady=20).pack()
    top.after(WELCOME_DURATION, top.destroy)

root = Tk()
Button(root, text="Click to register", command=welcome).pack()

root.mainloop()

您需要将事件处理程序连接到RFID检测。这是通过上面代码中的按钮模拟的,事件处理程序是welcome()函数。在welcome()中创建带有消息的顶级窗口小部件。使用.after()在2000毫秒(2秒)之后销毁顶级窗口小部件,它注册一个在延迟后调用的回调函数。

答案 1 :(得分:1)

我尝试了许多在网上找到的解决方案,但都没有达到我的预期。 最后,我找到了一个简单的解决方案:

from tkinter import Tk
from tkinter.messagebox import Message 
from _tkinter import TclError

TIME_TO_WAIT = 2000 # in milliseconds 
root = Tk() 
root.withdraw()
try:
    root.after(TIME_TO_WAIT, root.destroy) 
    Message(title="your title", message="your message", master=root).show()
except TclError:
    pass

我知道这不是最佳选择,因为我忽略了TclError,但这是唯一对我有用的方法。 顺便说一句,我正在使用python 3.7

答案 2 :(得分:0)

使用Python3,您必须使用导入名称(如Like)调用Toplevel():

import tkinter

top = tkinter.Toplevel()