我正在开发一个自动考勤系统,当学生扫描他的 RFID 标签时,他的考勤记录会被记录下来,同时使用 tkmessagebox 弹出窗口显示欢迎消息。用户将无法控制鼠标或键盘,我想保持消息显示 2 秒钟并删除消息框。有没有办法像建议的那样关闭 tkmessagebox 弹出窗口?
问问题
11980 次
4 回答
4
我尝试了许多我在网上找到的解决方案,但没有一个像我预期的那样有效。最后,我找到了一个简单的解决方案:
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
于 2020-10-18T17:49:23.740 回答
2
我不认为它可以完成,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()
带有消息的顶级小部件中创建。顶级小部件在 2000 毫秒(2 秒)后被销毁,使用.after()
它注册一个回调函数以在延迟后调用。
于 2015-05-14T12:09:38.210 回答
0
下面的小功能将完成这项工作。通过设置您可以选择的类型:信息、警告或错误消息框,默认为“信息”。您还可以设置超时时间,默认为 2.5 秒。
def showMessage(message, type='info', timeout=2500):
import tkinter as tk
from tkinter import messagebox as msgb
root = tk.Tk()
root.withdraw()
try:
root.after(timeout, root.destroy)
if type == 'info':
msgb.showinfo('Info', message, master=root)
elif type == 'warning':
msgb.showwarning('Warning', message, master=root)
elif type == 'error':
msgb.showerror('Error', message, master=root)
except:
pass
调用函数如下:对于消息类型“信息”和 2.5 秒的超时:
showMessage('Your message')
或者通过您自己的设置类型消息“错误”和超时 4 秒:
showMessage('Your message', type='error', timeout=4000)
于 2022-03-05T16:16:04.237 回答
0
使用 Python3,您必须使用导入名称调用 Toplevel(),例如:
import tkinter
top = tkinter.Toplevel()
于 2018-11-10T11:40:19.767 回答