我正在为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 秒执行一次函数,直到它返回 False
。如果您返回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()