4.2. Detalles de Cajas

A causa de esta flexibilidad, el empaquetamiento de cajas puede ser confuso al principio. Hay muchas opciones, y no es obvio al principio cómo enacajan todas ellas. Al final, de cualquier forma, hay básicamente cinco estilos. La Figura 4.1. Empaquetamiento: Cinco variaciones muestra el resultado de ejecutar el programa packbox.py con un argumento de 1:

Figura 4.1. Empaquetamiento: Cinco variaciones

Empaquetamiento: Cinco variaciones

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 es empaquetado en la hbox de la misma manera (por ejemplo, con los mismos argumentos al método pack_start().

Esto es un ejemplo del método pack_start() .

  box.pack_start(child, expand, fill, padding)

box es la caja donde estas empaquetando el objeto; el primer argumento, child, es el objeto que se va a empaquetar. Los objetos serán botones por ahora, por lo que estaremos empaquetando botones dentro de cajas.

El argumento expand de pack_start() y pack_end() controla si los controles se disponen para ocupar todo el espacio extra de la caja y de esta manera la caja se expande hasta ocupar todo el área reservada para ella (TRUE); o si la caja se encoge para ocupar el espacio justo de los controles (FALSE). Poniendo expand a FALSE te permitirá justificar a la derecha y a la izquierda tus 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 argumnto fill controla si el espacio extra se utiliza en los propios objetos (TRUE), como expacio 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 por defecto y argumentos con palabras clave. A través de este tutorial mostraré la definición de las funciones y métodos con valores por defecto y palabras clave cuando sea aplicable. 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. Los argumentos expand, fill y padding tienen los valores por defecto mostrados arriba. El argumento child debe especificarse.

Al crear una caja nueva, la función es la siguiente:

  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 en la caja tiene el mismo tamaño (por ejemplo el mismo ancho en una hbox, or el mismo alto en una vbox). Si se usa, las rutinas de empaquetado funcionan basicamente como si el argumento expand estuviera siempre activado.

¿Qué diferencia hay entre spacing (se pone cuando la caja se crea) y padding (se pone cuando los elementos se empaquetan)? El spacing se añade entre objetos, y el padding se añade a cada lado de un objeto. La Figura 4.2. Empaquetando con Spacing y Padding ilustra la diferencia; pasa un argumento de 2 a packbox.py :

Figura 4.2. Empaquetando con Spacing y Padding

Empaquetando con Spacing y Padding

La Figura 4.3. Empaquetando 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 esta sea redimensionada.

Figura 4.3. Empaquetando con pack_end()

Empaquetando con pack_end()