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:
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.