PyGTK - 状态栏类


通知区域通常位于窗口底部,称为状态栏。状态栏上可以显示任何类型的状态更改消息。它还具有一个可以调整其大小的手柄。

gtk.Statusbar 小部件维护着一个消息堆栈。因此,新消息将显示在当前消息之上。如果它被弹出,之前的消息将再次可见。消息的来源必须通过 context_id 来唯一标识。

以下是 gtk.Statusbar 小部件的构造函数 -

bar = gtk.Statusbar()

以下是 gtk.Statusbar 类的方法 -

  • Statusbar.push(context_id, text) - 这会将新消息推送到状态栏的堆栈上。

  • Statusbar.pop(context_id) - 这将从状态栏堆栈中删除具有指定context_id 的顶部消息。

状态栏小部件发出以下信号 -

文本弹出 当从状态栏消息堆栈中删除消息时会发出此消息。
文本推送 当消息添加到状态栏消息堆栈时会发出此消息。

以下示例演示了状态栏的功能。顶层窗口包含一个具有两行的 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 键以在状态栏中看到“已输入文本”消息。