4.5. Ejemplo de Empaquetado con Tablas

El programa de ejemplo table.py crea una ventana con tres botones en una tabla 2x2. Los primeros dos botones se colocarán en la fila superior. Un tercer botón, para salir, se coloca en la fila inferior, y ocupa las dos columnas. La Figura 4.4, “Empaquetado haciendo uso de una Tabla” ilustra la ventana resultante:

Figura 4.4. Empaquetado haciendo uso de una Tabla

Empaquetado haciendo uso de una Tabla

Aquí sigue el código fuente:

    1	#!/usr/bin/env python
    2	
    3	# ejemplo table.py
    4	
    5	import pygtk
    6	pygtk.require('2.0')
    7	import gtk
    8	
    9	class Table:
   10	    # Nuestra retrollamada.
   11	    # Los datos que se pasan a este método se imprimen por la salida estándar.
   12	    def callback(self, widget, data=None):
   13	        print "Hello again - %s was pressed" % data
   14	
   15	    # Esta retrollamada sale del programa.
   16	    def delete_event(self, widget, event, data=None):
   17	        gtk.main_quit()
   18	        return gtk.FALSE
   19	
   20	    def __init__(self):
   21	        # Creamos una ventana nueva
   22	        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   23	
   24	        # Establecemos el título de la ventana
   25	        self.window.set_title("Table")
   26	
   27	        # Fijamos un manejador para delete_event que sale de GTK+
   28	        # inmediatamente.
   29	        self.window.connect("delete_event", self.delete_event)
   30	
   31	        # Fijamos el grosor de los bordes.
   32	        self.window.set_border_width(20)
   33	
   34	        # Creamos una tabla 2x2.
   35	        table = gtk.Table(2, 2, gtk.TRUE)
   36	
   37	        # Ponemos la tabla en la ventana principal
   38	        self.window.add(table)
   39	
   40	        # Creamos el primer botón
   41	        button = gtk.Button("button 1")
   42	
   43	        # Cuando se pulsa el botón llamamos al método "callback"
   44	        # con una indicación a "button 1" como argumento.
   45	        button.connect("clicked", self.callback, "button 1")
   46	
   47	
   48	        # Insertamos el botón 1 en el cuadrante superior izquierdo de la tabla.
   49	        table.attach(button, 0, 1, 0, 1)
   50	
   51	        button.show()
   52	
   53	        # Creamos el segundo botón.
   54	
   55	        button = gtk.Button("button 2")
   56	
   57	        # Cuando se pulsa el botón llamamos al método "callback"
   58	        # con una indicación a "button 2" como argumento.
   59	        button.connect("clicked", self.callback, "button 2")
   60	        # Insertamos el botón 2 en el cuadrante superior derecho de la tabla.
   61	        table.attach(button, 1, 2, 0, 1)
   62	
   63	        button.show()
   64	
   65	        # Creamos el botón de salida "Quit"
   66	        button = gtk.Button("Quit")
   67	
   68	        # Cuando se pulsa el botón llamamos a la función main_quit y
   69	        # el programa se termina
   70	        button.connect("clicked", lambda w: gtk.main_quit())
   71	
   72	        # Insertamos el botón de salida en los dos cuadrantes inferiores de la tabla
   73	        table.attach(button, 0, 2, 1, 2)
   74	
   75	        button.show()
   76	
   77	        table.show()
   78	        self.window.show()
   79	
   80	def main():
   81	    gtk.main()
   82	    return 0       
   83	
   84	if __name__ == "__main__":
   85	    Table()
   86	    main()

La clase Table se define en las líneas 9-78. Las líneas 12-13 definen el método callback() que se llama al hacer "click" en dos de los botones. La retrollamada sólo imprime un mensaje en la consola indicando qué botón se pulsó usando los datos que se le pasan.

Las lineas 16-18 definen el método delete_event() que se llama cuando el manejador de ventanas le pide a la ventana que se elimine.

Las líneas 20-78 definen el constructor de la clase Table __init__(). Crea una ventana (línea 22), le pone el título (línea 25), conecta la retrollamada delete_event() a la señal "delete_event" (línea 29), y le pone el ancho al borde (línea 32). Se crea una gtk.Table en la línea 35 y se añade a la ventana en la línea 38.

Los dos botones superiores se crean en las líneas 41 y 55, sus señales "clicked" se conectan al método callback() en las líneas 45 y 59; y se añaden a la tabla en la primera fila en las líneas 49 y 61. Las líneas 66-72 crean el botón "Quit", conectan su señal "clicked" a la función mainquit() y lo añaden a la tabla ocupando la fila inferior completa.