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 键以在状态栏中看到"文本已输入"消息。