GTK Python 显示给定时间的消息

GTK Python display message for given time

我正在为 Python 程序做一个简单的 GUI。在一个函数中,我想显示一条文本消息几秒钟然后继续。我这部分的代码是:

self.message.set_text('This is a message')
time.sleep(3)
self.message_box.destroy()
# call another function

我的问题是,程序先休眠然后显示消息并继续销毁消息小部件,而不是显示消息 3 秒。有人告诉我 GTK 是异步的,因此最好使用线程,但是,我认为对于这个简单的程序(显示一些按钮和文本消息,具体取决于单击哪个按钮)它会有点矫枉过正。

有没有可能如何在没有线程的情况下显示给定时间的文本?

您不能使用 time.sleep(),因为它会阻塞 gtk 主循环。但是你是对的,线程对于你的用例来说是一种矫枉过正。您可以使用 glib.timeout_add_seconds()。这个方法实际上是为了每隔X秒执行一个函数,直到它returns False。如果你 return None 它也不会被再次调用。所以这是一个更简单的方法:

from gi.repository import Gtk, GLib

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_default_size(50, 20)
        label = Gtk.Label("test")
        self.add(label)
        GLib.timeout_add_seconds(3, label.destroy)


win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()