📅  最后修改于: 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键以在状态栏中查看“输入文本”消息。