Tabla de contenidos
Ya hemos visto casi todo lo que hay que ver sobre el control de botón. Es bastante sencillo. Se puede usar la función gtk.Button() para crear un botón con una etiqueta pasándole un parámetro de cadena, o uno en blanco si no se especifica dicha cadena. Después depende uno el empaquetar objetos tales como una etiqueta o un pixmap en este nuevo botón. Para ello, se crea una nueva caja, y después se colocan los objetos en ella usando el típico pack_start(). Finalmente se usa add() para colocar la caja dentro del botón.
La función para crear un botón es:
button = gtk.Button(label=None, stock=None) |
si se especifica una etiqueta ésta se usa como texto del botón.Si se especifica stock éste se usa para elegir un icono de serie y una etiqueta para el botón. Los elementos de serie son:
STOCK_DIALOG_INFO STOCK_DIALOG_WARNING STOCK_DIALOG_ERROR STOCK_DIALOG_QUESTION STOCK_DND STOCK_DND_MULTIPLE STOCK_ADD STOCK_APPLY STOCK_BOLD STOCK_CANCEL STOCK_CDROM STOCK_CLEAR STOCK_CLOSE STOCK_CONVERT STOCK_COPY STOCK_CUT STOCK_DELETE STOCK_EXECUTE STOCK_FIND STOCK_FIND_AND_REPLACE STOCK_FLOPPY STOCK_GOTO_BOTTOM STOCK_GOTO_FIRST STOCK_GOTO_LAST STOCK_GOTO_TOP STOCK_GO_BACK STOCK_GO_DOWN STOCK_GO_FORWARD STOCK_GO_UP STOCK_HELP STOCK_HOME STOCK_INDEX STOCK_ITALIC STOCK_JUMP_TO STOCK_JUSTIFY_CENTER STOCK_JUSTIFY_FILL STOCK_JUSTIFY_LEFT STOCK_JUSTIFY_RIGHT STOCK_MISSING_IMAGE STOCK_NEW STOCK_NO STOCK_OK STOCK_OPEN STOCK_PASTE STOCK_PREFERENCES STOCK_PRINT STOCK_PRINT_PREVIEW STOCK_PROPERTIES STOCK_QUIT STOCK_REDO STOCK_REFRESH STOCK_REMOVE STOCK_REVERT_TO_SAVED STOCK_SAVE STOCK_SAVE_AS STOCK_SELECT_COLOR STOCK_SELECT_FONT STOCK_SORT_ASCENDING STOCK_SORT_DESCENDING STOCK_SPELL_CHECK STOCK_STOP STOCK_STRIKETHROUGH STOCK_UNDELETE STOCK_UNDERLINE STOCK_UNDO STOCK_YES STOCK_ZOOM_100 STOCK_ZOOM_FIT STOCK_ZOOM_IN STOCK_ZOOM_OUT |
El programa de ejemplo buttons.py proporciona un ejemplo del uso de gtk.Button() para crear un botón con una imagen y una etiqueta en él. Se ha separado el código para crear una caja del resto para que se pueda usar en más programas. Hay más ejemplos del uso de imágenes más adelante en el tutorial. La figura Figura 6.1, “Botón con Pixmap y Etiqueta” muestra la ventana con un botón que incluye una imagen y una etiqueta:
El código fuente del programa buttons.py es:
1 #!/usr/bin/env python
2
3 # ejemplo de inicialización de botones buttons.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 # Creamos una nueva hbox con una imagen y una etiqueta empaquetadas en ella
10 # y devolvemos la caja.
11
12 def xpm_label_box(parent, xpm_filename, label_text):
13 # Crear caja para xpm y etiqueta
14 box1 = gtk.HBox(gtk.FALSE, 0)
15 box1.set_border_width(2)
16
17 # Ahora nos ponemos con la imagen
18 image = gtk.Image()
19 image.set_from_file(xpm_filename)
20
21 # Creamos una etiqueta para el botón
22 label = gtk.Label(label_text)
23
24 # Empaquetamos el pixmap y la etiqueta en la caja
25 box1.pack_start(image, gtk.FALSE, gtk.FALSE, 3)
26 box1.pack_start(label, gtk.FALSE, gtk.FALSE, 3)
27
28 image.show()
29 label.show()
30 return box1
31
32 class Buttons:
33 # Nuestro método habitual de retrollamada (callback)
34 def callback(self, widget, data=None):
35 print "Hello again - %s was pressed" % data
36
37 def __init__(self):
38 # Creamos una ventana nueva
39 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
40
41 self.window.set_title("Image'd Buttons!")
42
43 # Es buena idea hacer esto para todas las ventanas
44 self.window.connect("destroy", lambda wid: gtk.main_quit())
45 self.window.connect("delete_event", lambda a1,a2:gtk.main_quit())
46
47 # Fijamos el ancho de borde de la ventana
48 self.window.set_border_width(10)
49
50 # Creamos un nuevo botón
51 button = gtk.Button()
52
53 # Conectamos la señal "clicked" a nuestra retrollamada
54 button.connect("clicked", self.callback, "cool button")
55
56 # Esto llama a nuestra función de creación de caja
57 box1 = xpm_label_box(self.window, "info.xpm", "cool button")
58
59 # Empaquetamos y mostramos todos los controles
60 button.add(box1)
61
62 box1.show()
63 button.show()
64
65 self.window.add(button)
66 self.window.show()
67
68 def main():
69 gtk.main()
70 return 0
71
72 if __name__ == "__main__":
73 Buttons()
74 main()
|
Las líneas 12-34 definen la función auxiliar xpm_label_box() que crea una caja horizontal con un borde de ancho 2 (lineas 14-15) y le pone una imagen (lineas 22-23) y una etiqueta (linea 26).
Las líneas 36-70 definen la clase Buttons. Las líneas 41-70 definen el método de inicialización de instancia que crea una ventana (linea 43), le pone el título (linea 45), le conecta las señales "delete_event" y "destroy" (lineas 48-49). La linea 55 crea el botón sin etiqueta. Su señal "clicked" se conecta al método callback() en la linea 58. La función xpm_label_box() se llama en la linea 61 para crear la imagen y la etiqueta que se pondrán en el botón en la linea 64.
La función xpm_label_box() podría usarse para empaquetar archivos xpm y etiquetas en cualquier control que pueda ser un contenedor.
El control Botón tiene las siguientes señales:
pressed - se emite cuando el botón del puntero se presiona en el control Botón
released - se emite cuando el botón del puntero se suelta en el control Botón
clicked - se emite cuando el botón del puntero se presiona y luego se
suelta sobre el control Botón
enter - se emite cuando el puntero entra en el control Botón
leave - se emite cuando el puntero sale del control Botón
|