4.4. Uso de Tablas para el Empaquetado

Veamos otra manera de empaquetado. Mediante tablas. Pueden ser extremadamente útiles en determinadas situaciones.

Al usar tablas, creamos una rejilla en donde podemos colocar los controles, que pueden ocupar tantos espacios como especifiquemos.

Lo primero que debemos mirar es, obviamente, la función gtk.Table() :

  table = gtk.Table(rows=1, columns=1, homogeneous=FALSE)

El primer argumento es el número de filas de la tabla, mientras que el segundo, obviamente, es el número de columnas.

El argumento homogeneous tiene que ver con el tamaño de las celdas de la tabla. Si homogeneous es TRUE, las celdas de la tabla tienen el tamaño del mayor control en ella. Si homogeneous es FALSE, el tamaño de las celdas viene dado por el control más alto de su misma fila, y el control más ancho de su columna.

Las filas y las columnas se disponen de 0 a n, donde n es el número que se especificó en la llamada a gtk.Table(). Por tanto, si se especifica rows (filas) = 2 y columns (columnas) = 2, la dispoisición quedaría así:

   0          1          2
  0+----------+----------+
   |          |          |
  1+----------+----------+
   |          |          |
  2+----------+----------+

Obsérvese que el sistema de coordenadas tiene su orgien en la esquina superior izquierda. Para introducir un control en una caja, se usa el siguiente método:

  table.attach(child, left_attach, right_attach, top_attach, bottom_attach,
               xoptions=EXPAND|FILL, yoptions=EXPAND|FILL, xpadding=0, ypadding=0)

La instancia table es la tabla que se creó con gtk.Table(). El primer parámetro ("child") es el control que se desea introducir en la tabla.

Los argumentos left_attach, right_attach, top_attach y bottom_attach especifican dónde situar el control, y cuántas cajas usar. Si se quiere poner un botón en la esquina inferior derecha de una tabla 2x2, y se quiere que ocupe SÓLO ese espacio, left_attach sería = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.

Ahora, si se desea que un control ocupe la fila entera de la tabla 2x2, se pondría left_attach = 0, right_attach = 2, top_attach = 0, bottom_attach = 1.

Los argumentos xoptions e yoptions se usan para especificar opciones de colocación y pueden unirse mediante la operación OR, permitiendo así múltiples opciones.

Estas opciones son:

FILLSi la caja es más grande que el control, y se especifica FILL, el control se expandirá hasta usar todo el espacio disponible.
SHRINKSi se le asigna menos espacio a la tabla del que solicitó (normalmente porque el usuario ha redimensionado la ventana), entonces los controles normalmente sería empujados a la parte inferior de la ventana y desaparecerían. Si se especifica SHRINK, los controles se encojerán con la tabla.
EXPANDEsto hará que la tabla se expanda para usar el espacio sobrante en la ventana.

El Padding es igual que en las cajas, ya que crea un espacio vacío especificado en píxeles alrededor del control.

También tenemos los métodos set_row_spacing() y set_col_spacing(), que añaden espacio entre las filas en la columna o fila especificada.

  table.set_row_spacing(row, spacing)

y

  table.set_col_spacing(column, spacing)

Obsérvese que, para las columnas, el espacio va a la derecha de la columna, y, para las filas, el espacio va debajo de la fila.

También se puede poner un espacio igual en todas las filas y/o columnas con:

  table.set_row_spacings(spacing)

y,

  table.set_col_spacings(spacing)

Obsérvese que con éstas funciones, la última fila y la última columna no obtienen ningún espacio.