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

Posted

技术标签:

【中文标题】在 python 中一段时间​​后关闭 tkmessagebox【英文标题】:closing tkmessagebox after some time in python 【发布时间】:2015-07-25 23:11:42 【问题描述】:

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

【问题讨论】:

【参考方案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

【讨论】:

当我尝试这个时,它工作但是我收到一个错误objc [49016]:autorelease pool page 0x7f8181950000损坏的magic 0x00000000 0x0000000000 0x0000000000 0x0000000000 0x0000000000 0x0000000000 0x0000000000 0x0000000000应为0x1a1a1a10x4f545541 0x4545552 0x45455341 pthread 0x10a555fe00应该是0x10a55fe00如何避免错误?【参考方案2】:

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

import tkinter

top = tkinter.Toplevel()

【讨论】:

【参考方案3】:

我认为 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() 注册一个回调函数以在延迟后调用。

【讨论】:

以上是关于在 python 中一段时间​​后关闭 tkmessagebox的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中一段时间​​后切换小部件?

在 UWP 中一段时间​​后自动导航到新页面

如何确保在 Python 中一次只能由一个请求执行一段代码?

在 AWS Lambda 中使用 pymongo 一段时间后发生 AutoReconnect 连接关闭错误

困惑为啥在Objective C中一段代码有效而另一段代码无效

python: [Errno 10054] 现有连接被远程主机强行关闭