PyGTK - Statusbar 类

  • 简述

    通常在窗口底部的通知区域称为状态栏。任何类型的状态变化消息都可以显示在状态栏上。它还有一个可以调整大小的手柄。
    gtk.Statusbar 小部件维护着一堆消息。因此,新消息显示在当前消息之上。如果它被弹出,之前的消息将再次可见。消息的来源必须由 context_id 标识,以唯一标识它。
    以下是 gtk.Statusbar 小部件的构造函数 -
    
    bar = gtk.Statusbar()
    
    以下是 gtk.Statusbar 类的方法 -
    • Statusbar.push(context_id, text)- 这会将新消息推送到状态栏的堆栈中。
    • Statusbar.pop(context_id)- 这将删除带有指定的顶部消息context_id从状态栏的堆栈中。
    状态栏小部件发出以下信号 -
    text-popped 当从状态栏消息堆栈中删除消息时会发出此消息。
    text-pushed 当消息添加到状态栏消息堆栈时,会发出此消息。
    以下示例演示了状态栏的功能。顶层窗口包含一个有两行的 VBox。上排有一个固定小部件,其中放置了一个标签、一个条目小部件和一个按钮。而在底行中,添加了一个 gtk.Statusbar 小部件。
    为了向状态栏发送消息,需要获取其 context_id。
    
    id1 = self.bar.get_context_id("Statusbar")
    
    Button 对象的“点击”信号连接到回调函数,通过该回调函数将消息推送到状态栏中。并且,当在 Entry 小部件内按下 Enter 键时会发出“激活”信号。此小部件连接到另一个回调。
    
    btn.connect("clicked", self.on_clicked, id1)
    txt.connect("activate", self.on_entered, id1)
    
    两个回调都使用push()在通知区域中闪烁消息的方法。
  • 例子

    观察以下代码 -
    
    import gtk
    class PyApp(gtk.Window):
       
       def __init__(self):
          super(PyApp, self).__init__()
          self.set_title("Statusbar demo")
          self.set_size_request(400,200)
          self.set_position(gtk.WIN_POS_CENTER)
          
          vbox = gtk.VBox()
          fix = gtk.Fixed()
          lbl = gtk.Label("Enter name")
          
          fix.put(lbl, 175, 50)
          txt = gtk.Entry()
          fix.put(txt, 150, 100)
          
          btn = gtk.Button("ok")
          fix.put(btn, 200,150)
          
          vbox.add(fix)
          self.bar = gtk.Statusbar()
          vbox.pack_start(self.bar, True, False, 0)
          
          id1 = self.bar.get_context_id("Statusbar")
          btn.connect("clicked", self.on_clicked, id1)
          txt.connect("activate", self.on_entered, id1)
          
          self.add(vbox)
          self.connect("destroy", gtk.main_quit)
          self.show_all()
          
          def on_clicked(self, widget, data=None):
             self.bar.push(data, "Button clicked
          
          def on_entered(self, widget, data):
             self.bar.push(data, "text entered")
    PyApp()
    gtk.main()
    
    执行后,上述代码将显示以下输出 -
    状态栏演示
    尝试在文本框中输入并按 Enter 以在状态栏中查看“输入的文本”消息。