📜  PyGTK-状态栏类

📅  最后修改于: 2020-11-08 08:00:40             🧑  作者: Mango


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

gtk.Statusbar小部件维护一堆消息。因此,新消息将显示在当前消息的顶部。如果弹出,则先前的消息将再次可见。消息的来源必须由context_id标识,以唯一地标识它。

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

bar = gtk.Statusbar()

以下是gtk.Statusbar类的方法-

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

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

Statusbar小部件发出以下信号-

text-popped This is emitted when a message is removed from the statusbar message stack.
text-pushed This is emitted when a message is added to the statusbar message stack.

下面的示例演示了状态栏的功能。顶级窗口包含一个具有两行的VBox。上排有一个固定小部件,其中放置了标签,条目小部件和按钮。而在底行中,添加了一个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, "text entered")

PyApp()
gtk.main()

执行后,上面的代码将显示以下输出-

状态栏演示

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