有没有办法在不单击“确定”的情况下销毁 tkinter 消息框?
Is there a way to destroy the tkinter messagebox without clicking OK?
我知道你可以使用类似的东西,
self.root.after(1000, self.update_clock)
但是我可以用类似于 messagebox.showinfo.destroy() 的函数替换第二个函数吗?我基本上是在尝试将这些消息框放在计时器上,这样用户就可以看到它们,而不必自己做任何事情。
response = tkinter.messagebox.showinfo("Warning!", "New artist object has been created: "
+ "\n" + "$oid: " + str(self.artistObjectId))
if response == "ok":
self.currentState += 1
self.states[self.currentState](importedTracks[self.currentTrack])
也许消息框不是您在此上下文中所需要的。如果您只想显示一条消息然后让它自动消失,您可以使用新的 TopLevel 或框架,然后在超时后销毁框架。在用户交互和体验方面,消息框的设计是为了等待用户输入?
这是使用新 TopLevel 的一个很好的例子
closing tkmessagebox after some time in python
我发现这个页面描述了如何自定义消息框,但我能找到的内容有些有限。
下面的小函数可以完成这项工作。通过设置您可以选择的类型:信息、警告或错误消息框,默认为'Info'。您还可以设置超时,默认为 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
调用函数如下:
对于消息类型 'Info' 和 2.5 秒超时:
showMessage('Your message')
或者通过您自己的消息类型设置 'Error' 和超时 4 秒:
showMessage('Your message', type='error', timeout=4000)
我知道你可以使用类似的东西, self.root.after(1000, self.update_clock)
但是我可以用类似于 messagebox.showinfo.destroy() 的函数替换第二个函数吗?我基本上是在尝试将这些消息框放在计时器上,这样用户就可以看到它们,而不必自己做任何事情。
response = tkinter.messagebox.showinfo("Warning!", "New artist object has been created: "
+ "\n" + "$oid: " + str(self.artistObjectId))
if response == "ok":
self.currentState += 1
self.states[self.currentState](importedTracks[self.currentTrack])
也许消息框不是您在此上下文中所需要的。如果您只想显示一条消息然后让它自动消失,您可以使用新的 TopLevel 或框架,然后在超时后销毁框架。在用户交互和体验方面,消息框的设计是为了等待用户输入?
这是使用新 TopLevel 的一个很好的例子
closing tkmessagebox after some time in python
我发现这个页面描述了如何自定义消息框,但我能找到的内容有些有限。
下面的小函数可以完成这项工作。通过设置您可以选择的类型:信息、警告或错误消息框,默认为'Info'。您还可以设置超时,默认为 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
调用函数如下: 对于消息类型 'Info' 和 2.5 秒超时:
showMessage('Your message')
或者通过您自己的消息类型设置 'Error' 和超时 4 秒:
showMessage('Your message', type='error', timeout=4000)