4.4. Uso de Tablas para Empaquetar

Veamos otra manera de empaquetar - Tablas. Pueden ser extremadamente útiles en determinadas situaciones.

Al usar tablas, creamos una rejilla donde podemos colocar los controles. Los controles puede ocupar tantos espacios como especifiquemos.

Lo primero que hay que 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 en 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 la tabla. Si homogeneous es FALSE, el tamaño de las celdas viene dado por el control más alto en su misma fila, y el control más ancho en 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 especificas rows (filas) = 2 y columns (columnas) = 2, la dispoisición quedaría así:

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

Fijate que el sistema de coordenadas empieza en la esquina superior izquierda. Para meter un control en una caja, 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 creaste con gtk.Table(). El primer parámetro ("child") es el control que quieres meter en la tabla.

Los argumentos left_attach, right_attach, top_attach y bottom_attach especifican donde colocar el control, y cuantas cajas usar. Si quieres un botón en la esquina inferior derecha de una tabla 2x2, y quieres que ocupe SÓLO ese espacio, left_attach sería = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.

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

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

Estas opciones son:

FILLSi la caja es más grande que el control, y especificas 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 especificas SHRINK, los controles se encojeran 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 pixeles alrededor del control.

También tenemos los métodos set_row_spacing() y set_col_spacing() . 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)

Fijate 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 puedes poner un espacio consistente para todas las filas y/o columnas con:

  table.set_row_spacings(spacing)

y,

  table.set_col_spacings(spacing)

Fijate que con estas funciones, la última fila y la última columna no obtienen ningún espacio.