GTK Python显示给定时间的消息

时间:2015-04-28 15:30:06

标签: python-3.x gtk pygtk

我正在为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是异步的,因此最好使用线程,但是,我认为对于这个简单的程序(显示一些按钮和文本消息取决于哪一个被点击)这将是一个过度杀伤。

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

1 个答案:

答案 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()