A causa de esta flexibilidad, el empaquetado de cajas puede resultar confuso al principio, dado que admite muchas opciones cuyo funcionamiento conjunto no resulta obvio. Sin embargo, existen básicamente cinco estilos. La Figura 4.1, “Empaquetado: Cinco variaciones” muestra el resultado de la ejecución del programa packbox.py con un argumento de 1:
Cada línea contiene una caja horizontal (hbox) con varios botones.
La llamada a pack es una copia de la llamada a pack en cada uno de los botones
de la Hbox. Cada botón se empaqueta en la hbox de la
misma manera (con los mismos argumentos al método
pack_start() ).
Este es un ejemplo del método pack_start():
box.pack_start(child, expand, fill, padding)
box es la caja donde se empaqueta el
objeto. El primer argumento, child, es el
objeto que se va a empaquetar. Por ahora los objetos serán botones,
con lo que estaríamos empaquetando botones dentro de cajas.
El argumento expand de
pack_start() y
pack_end() controla si los controles se
disponen de forma que ocupen todo el espacio extra de la caja y, de esta manera,
ésta se expande hasta ocupar todo el área reservada para ella
(TRUE); o si se encoge para ocupar el
espacio justo de los controles (FALSE). Poner
expand a FALSE permite justificar a la derecha y a la izquierda
los controles. Si no, se expandirán para llenar la caja, y el mismo
efecto podría obtenerse usando sólo o pack_start() o
pack_end().
El argumento fill controla si el
espacio extra se utiliza en los propios objetos
(TRUE) o como espacio extra en la caja alrededor de
los objetos (FALSE). Sólo tiene efecto si el
argumento expand también es TRUE.
Python permite definir un método o función con valores de argumento
predeterminados y argumentos con nombre. A lo largo de este tutorial
se verá la definición de las funciones y métodos con valores predeterminados y
argumentos con nombre cuando sean de aplicación. Por ejemplo, el método
pack_start se define así:
box.pack_start(child,expand=gtk.TRUE,fill=gtk.TRUE,padding=0) box.pack_end(child,expand=gtk.TRUE,fill=gtk.TRUE,padding=0)
child, expand,
fill y padding son
palabras clave (argumentos con nombre). Los argumentos expand,
fill y padding tienen
los valores predeterminados (o "por defecto") mostrados arriba. El argumento
child debe especificarse obligatoriamente al no tener un valor
predeterminado.
Las funciones que nos permiten crear una caja nueva son:
hbox = gtk.HBox(homogeneous=gtk.FALSE,spacing=0) vbox = gtk.VBox(homogeneous=gtk.FALSE,spacing=0)
El argumento homogeneous de
gtk.HBox() y gtk.VBox() controla si
cada objeto de la caja tiene el mismo tamaño (por ejemplo, el mismo ancho en
una hbox, o la misma altura en una vbox). Si se usa, las rutinas de empaquetado
funcionan basicamente como si el argumento expand estuviera siempre activado.
¿Qué diferencia existe entre spacing (se
fija al crear la caja) y padding (se determina
al empaquetar los elementos)? El spacing se añade entre
objetos, y el padding se añade a cada lado de un objeto. La Figura 4.2, “Empaquetado con Spacing y Padding” ilustra la diferencia, pasando un argumento de 2 a packbox.py :
La Figura 4.3, “Empaquetado con pack_end()” ilustra el uso del método
pack_end() (pasa un argumento de 3 a packbox.py). La etiqueta
"end" se empaqueta con el método
pack_end(). Se mantendrá en el borde derecho
de la ventana cuando ésta se redimensione.