6.3. Botones de Activación (Check Buttons)

Los botones de activación heredan muchas propiedades y métodos de los botones biestado vistos anteriormente, pero su apariencia es un poco diferente. En vez de ser botones con texto dentro de ellos, son pequeñas cajas con un texto a su derecha. Normalmente se utilizan para opciones que pueden estar activadas o desactivadas en las aplicaciones.

El método de creación es similar al de los botones normales.

  check_button = gtk.CheckButton(label=None)

Si el argumento label se especifica, el método crea un botón de activación con una etiqueta a su lado. El texto label de la etiqueta se analiza en busca de caracteres mnemotécnicos con prefijo '_'

Ver y modificar el estado de un botón de activación es igual que en un botón biestado.

El programa checkbutton.py proporciona un ejemplo del uso de los botones de activación. La figura Figura 6.3, “Ejemplo de Botón de Activación” ilustra la ventana resultante:

Figura 6.3. Ejemplo de Botón de Activación

Ejemplo de Botón de Activación

El código fuente del programa checkbutton.py es:

    1	#!/usr/bin/env python
    2	
    3	# ejemplo checkbutton.py
    4	
    5	import pygtk
    6	pygtk.require('2.0')
    7	import gtk
    8	
    9	class CheckButton:
   10	    # Nuestra retrollamada
   11	    # Los datos pasados a este método se imprimen en la salida estándar
   12	    def callback(self, widget, data=None):
   13	        print "%s was toggled %s" % (data, ("OFF", "ON")[widget.get_active()])
   14	
   15	    # Esta retrollamada termina el programa
   16	    def delete_event(self, widget, event, data=None):
   17	        gtk.main_quit()
   18	        return gtk.FALSE
   19	
   20	    def __init__(self):
   21	        # Crear una nueva ventana
   22	        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   23	
   24	        # Establecer el título de la ventana
   25	        self.window.set_title("Check Button")
   26	
   27	        # Fijar un manejador para delete_event que
   28	        # salga inmediatamente de GTK.
   29	        self.window.connect("delete_event", self.delete_event)
   30	
   31	        # Fijamos el borde de la ventana
   32	        self.window.set_border_width(20)
   33	
   34	        # Creamos una caja vertical vbox
   35	        vbox = gtk.VBox(gtk.TRUE, 2)
   36	
   37	        # Insertamos vbox en la ventana principal
   38	        self.window.add(vbox)
   39	
   40	        # Creamos el primer botón
   41	        button = gtk.CheckButton("check button 1")
   42	
   43	        # Cuando se conmuta el botón llamamos el método "callback"
   44	        # con un puntero a "button" como argumento
   45	        button.connect("toggled", self.callback, "check button 1")
   46	
   47	
   48	        # Insertamos el botón 1
   49	        vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
   50	
   51	        button.show()
   52	
   53	        # Creamos un segundo botón
   54	
   55	        button = gtk.CheckButton("check button 2")
   56	
   57	        # Cuando se conmuta el botón llamamos el método "callback"
   58	        # con un puntero a "button 2" como argumento
   59	        button.connect("toggled", self.callback, "check button 2")
   60	        # Insertamos el botón 2
   61	        vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
   62	
   63	        button.show()
   64	
   65	        # Creamos el botón "Quit"
   66	        button = gtk.Button("Quit")
   67	
   68	        # Cuando se pulsa el botón llamamos la función mainquit
   69	        # y el programa termina
   70	        button.connect("clicked", lambda wid: gtk.main_quit())
   71	
   72	        # Insertamos el botón de salida
   73	        vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
   74	
   75	        button.show()
   76	        vbox.show()
   77	        self.window.show()
   78	
   79	def main():
   80	    gtk.main()
   81	    return 0       
   82	
   83	if __name__ == "__main__":
   84	    CheckButton()
   85	    main()