Las Statusbar (Barras de Estado) son unos
controles simples que se usan para visualizar un mensaje de texto. Mantienen
una pila de los mensajes que se les han enviado, para que al quitar el mensaje
actual se visualice el mensaje anterior.
Para que distintas partes de la aplicación puedan usar la misma barra de estado para visualizar mensajes, el control de barra de estado mantiene Identificadores de Contexto que se usan para identificar diferentes "usuarios". El mensaje en el tope de la pila es el que se visualiza, no importa el contexto al que pertenezca. Los mensajes se apilan en orden último en llegar primero en salir, no en orden de identificadores de contexto.
Una barra de estado se crea con una llamada a:
statusbar = gtk.Statusbar()
Se puede solicitar un nuevo Identificador de Contexto usando una llamada al siguiente método con una pequeña descripción textual del contexto:
context_id = statusbar.get_context_id(context_description)
Hay tres métodos adicionales para utilizar las barras de estado:
message_id = statusbar.push(context_id,text) statusbar.pop(context_id) statusbar.remove(context_id,message_id)
El primero, push(), se usa para añadir un
nuevo mensaje a la statusbar (barra de estado). Devuelve un
message_id (identificador de mensaje), que puede usarse con
el método remove() para borrar el mensaje que cumpla la
combinación de message_id y
context_id en
la pila de la statusbar (barra de estado).
El método pop() elimina el mensaje que esté en
la posición más alta de la pila con el identificador de contexto
context_id.
El programa de ejemplo statusbar.py crea una barra de estado y dos botones, uno para insertar elementos en la barra de estado, y otro para sacar el último elemento fuera. La figura Figura 9.9, “Ejemplo de Barra de Estado” muestra el resultado:
El código fuente es:
1 #!/usr/bin/env python
2
3 # ejemplo statusbar.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class StatusbarExample:
10 def push_item(self, widget, data):
11 buff = " Item %d" % self.count
12 self.count = self.count + 1
13 self.status_bar.push(data, buff)
14 return
15
16 def pop_item(self, widget, data):
17 self.status_bar.pop(data)
18 return
19
20 def __init__(self):
21 self.count = 1
22 # crea una ventana nueva
23 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
24 window.set_size_request(200, 100)
25 window.set_title("PyGTK Statusbar Example")
26 window.connect("delete_event", lambda w,e: gtk.main_quit())
27
28 vbox = gtk.VBox(gtk.FALSE, 1)
29 window.add(vbox)
30 vbox.show()
31
32 self.status_bar = gtk.Statusbar()
33 vbox.pack_start(self.status_bar, gtk.TRUE, gtk.TRUE, 0)
34 self.status_bar.show()
35
36 context_id = self.status_bar.get_context_id("Statusbar example")
37
38 button = gtk.Button("push item")
39 button.connect("clicked", self.push_item, context_id)
40 vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
41 button.show()
42
43 button = gtk.Button("pop last item")
44 button.connect("clicked", self.pop_item, context_id)
45 vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
46 button.show()
47
48 # siempre mostramos la ventana al final para que se muestre
49 # de una vez en pantalla.
50 window.show()
51
52 def main():
53 gtk.main()
54 return 0
55
56 if __name__ == "__main__":
57 StatusbarExample()
58 main()