10.10. Cajas de Botones (ButtonBoxes)

Las ButtonBoxes (Cajas de Botones) proporcionan un sistema fácil de agrupar botones rápidamente. Vienen en variedades horizontales y verticales. Se puede crear una nueva ButtonBox con una de las siguiente llamadas, que crean una caja horizontal o vertical, respectivamente:

  hbutton_box = gtk.HButtonBox()

  vbutton_box = gtk.VButtonBox()

Los únicos métodos de las cajas de botones afectan a la disposición de los botones.

La disposición de los botones dentro de la caja se establece usando:

  button_box.set_layout(layout_style)

El argumento layout_style puede tomar uno de los siguientes valores:

  BUTTONBOX_DEFAULT_STYLE # estilo predeterminado
  BUTTONBOX_SPREAD        # esparcidos
  BUTTONBOX_EDGE          # al borde
  BUTTONBOX_START         # al principio
  BUTTONBOX_END           # al final

El valor actual de layout_style se puede consultar usando:

  layout_style = button_box.get_layout()

Los botones se añaden a la ButtonBox usando el típico método de Container (Contenedor):

  button_box.add(widget)

El programa de ejemplo buttonbox.py ilustra todos los tipos de disposición de las ButtonBoxes. La ventana resultante es:

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

    1	#!/usr/bin/env python
    2	
    3	# ejemplo buttonbox.py
    4	
    5	import pygtk
    6	pygtk.require('2.0')
    7	import gtk
    8	
    9	class ButtonBoxExample:
   10	    # Creamos una Button Box con los parámetros especificados
   11	    def create_bbox(self, horizontal, title, spacing, layout):
   12	        frame = gtk.Frame(title)
   13	
   14	        if horizontal:
   15	            bbox = gtk.HButtonBox()
   16	        else:
   17	            bbox = gtk.VButtonBox()
   18	
   19	        bbox.set_border_width(5)
   20	        frame.add(bbox)
   21	
   22	        # Fijamos el aspecto de Button Box
   23	        bbox.set_layout(layout)
   24	        bbox.set_spacing(spacing)
   25	
   26	        button = gtk.Button(stock=gtk.STOCK_OK)
   27	        bbox.add(button)
   28	
   29	        button = gtk.Button(stock=gtk.STOCK_CANCEL)
   30	        bbox.add(button)
   31	
   32	        button = gtk.Button(stock=gtk.STOCK_HELP)
   33	        bbox.add(button)
   34	
   35	        return frame
   36	
   37	    def __init__(self):
   38	        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   39	        window.set_title("Button Boxes")
   40	
   41	        window.connect("destroy", lambda x: gtk.main_quit())
   42	
   43	        window.set_border_width(10)
   44	
   45	        main_vbox = gtk.VBox(gtk.FALSE, 0)
   46	        window.add(main_vbox)
   47	
   48	        frame_horz = gtk.Frame("Horizontal Button Boxes")
   49	        main_vbox.pack_start(frame_horz, gtk.TRUE, gtk.TRUE, 10)
   50	
   51	        vbox = gtk.VBox(gtk.FALSE, 0)
   52	        vbox.set_border_width(10)
   53	        frame_horz.add(vbox)
   54	
   55	        vbox.pack_start(self.create_bbox(gtk.TRUE, "Spread (spacing 40)",
   56	                                         40, gtk.BUTTONBOX_SPREAD),
   57	                        gtk.TRUE, gtk.TRUE, 0)
   58	
   59	        vbox.pack_start(self.create_bbox(gtk.TRUE, "Edge (spacing 30)",
   60	                                         30, gtk.BUTTONBOX_EDGE),
   61	                        gtk.TRUE, gtk.TRUE, 5)
   62	
   63	        vbox.pack_start(self.create_bbox(gtk.TRUE, "Start (spacing 20)",
   64	                                         20, gtk.BUTTONBOX_START),
   65	                        gtk.TRUE, gtk.TRUE, 5)
   66	
   67	        vbox.pack_start(self.create_bbox(gtk.TRUE, "End (spacing 10)",
   68	                                         10, gtk.BUTTONBOX_END),
   69	                        gtk.TRUE, gtk.TRUE, 5)
   70	
   71	        frame_vert = gtk.Frame("Vertical Button Boxes")
   72	        main_vbox.pack_start(frame_vert, gtk.TRUE, gtk.TRUE, 10)
   73	
   74	        hbox = gtk.HBox(gtk.FALSE, 0)
   75	        hbox.set_border_width(10)
   76	        frame_vert.add(hbox)
   77	
   78	        hbox.pack_start(self.create_bbox(gtk.FALSE, "Spread (spacing 5)",
   79	                                         5, gtk.BUTTONBOX_SPREAD),
   80	                        gtk.TRUE, gtk.TRUE, 0)
   81	
   82	        hbox.pack_start(self.create_bbox(gtk.FALSE, "Edge (spacing 30)",
   83	                                         30, gtk.BUTTONBOX_EDGE),
   84	                        gtk.TRUE, gtk.TRUE, 5)
   85	
   86	        hbox.pack_start(self.create_bbox(gtk.FALSE, "Start (spacing 20)",
   87	                                         20, gtk.BUTTONBOX_START),
   88	                        gtk.TRUE, gtk.TRUE, 5)
   89	
   90	        hbox.pack_start(self.create_bbox(gtk.FALSE, "End (spacing 20)",
   91	                                         20, gtk.BUTTONBOX_END),
   92	                        gtk.TRUE, gtk.TRUE, 5)
   93	
   94	        window.show_all()
   95	
   96	def main():
   97	    # Entramos en el bucle de eventos
   98	    gtk.main()
   99	    return 0
  100	
  101	if __name__ == "__main__":
  102	    ButtonBoxExample()
  103	    main()