我正在为Python程序做一个简单的GUI。在一个函数中,我想显示文本消息几秒钟然后继续。我的这部分代码是:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
<ListView android:id="@+id/right_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
我的问题是,程序首先进入睡眠状态,然后显示消息并继续销毁消息窗口小部件,而不是显示消息3秒钟。我被告知GTK是异步的,因此最好使用线程,但是,我认为对于这个简单的程序(显示一些按钮和文本消息取决于哪一个被点击)这将是一个过度杀伤。
是否有可能在没有线程的情况下如何显示给定时间的文本?
答案 0 :(得分:0)
您无法使用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()