3

我知道你可以使用类似 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])
4

2 回答 2

4

在这种情况下,可能不需要消息框。如果您只想显示一条消息,然后让它自动消失,您可以使用新的 TopLevel 或框架,然后在超时后销毁该框架。在用户交互和体验方面,消息框是为了等待用户输入而设计的?

这是使用新 TopLevel 的一个很好的例子

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

我发现这个页面描述了可以做些什么来自定义消息框,尽管我能找到的东西有些有限。

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

于 2016-01-06T21:58:02.090 回答
1

下面的小功能将完成这项工作。通过设置您可以选择的类型:信息、警告或错误消息框,默认为“信息”。您还可以设置超时时间,默认为 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:30:48.173 回答