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()