9.8. Barras de Estado

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:

Figura 9.9. Ejemplo de Barra de Estado

Ejemplo de Barra de Estado

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()