首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中一段时间后关闭tkmessagebox

在python中一段时间后关闭tkmessagebox
EN

Stack Overflow用户
提问于 2015-05-14 18:57:06
回答 3查看 11.2K关注 0票数 8

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

EN

回答 3

Stack Overflow用户

发布于 2020-10-19 01:49:24

我已经尝试了许多我在网上找到的解决方案,没有一个像我预期的那样有效。最后,我找到了一个简单的解决方案:

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2015-05-14 20:09:38

我不认为这可以用tkMessageBox完成,因为它创建了一个模式对话框,并且您没有访问小部件id的权限(因此它可以通过编程方式销毁)。

但是,创建自己的顶级窗口,在其中添加一些欢迎消息,然后在一段时间后关闭它并不难。如下所示:

代码语言:javascript
复制
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()中,将创建一个包含消息的顶级小部件。顶层小部件在2000毫秒(2秒)后使用.after()销毁,它注册一个回调函数,以便在一段延迟后调用。

票数 2
EN

Stack Overflow用户

发布于 2018-11-10 19:40:20

使用Python3时,必须使用导入名称调用Toplevel(),如下所示:

代码语言:javascript
复制
import tkinter

top = tkinter.Toplevel()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30235587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档