有没有办法在不单击“确定”的情况下销毁 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

我发现这个页面描述了如何自定义消息框,但我能找到的内容有些有限。

http://effbot.org/tkinterbook/tkinter-standard-dialogs.htm

下面的小函数可以完成这项工作。通过设置您可以选择的类型:信息、警告或错误消息框,默认为'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)