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 当一条消息被添加到状态栏消息堆栈时,它会被发出。

下面的例子演示了状态栏的功能。 Toplevel 窗口包含一个有两行的 VBox。 上排有一个 Fixed 小部件,其中放置了一个标签、一个 Entry 小部件和一个按钮。 而在底行,添加了一个 gtk.Statusbar 小部件。

为了向状态栏发送消息,需要获取其 context_id。

id1 = self.bar.get_context_id("Statusbar")

Button 对象的"clicked"信号连接到回调函数,通过该回调函数将消息推送到状态栏中。 并且,当在 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, "文本已输入")

PyApp()
gtk.main()

执行后,上面的代码会显示如下输出 −

状态栏演示

尝试在文本框中键入内容,然后按 Enter 键以在状态栏中看到"文本已输入"消息。