Otra forma de posicionar widgets es usando tablas, estas crean una cuadricula en la que se irán colocando.
Para crear una tabla se usa la función:
GtkWidget *gtk_table_new ( guint rows, guint columns, gboolean homogeneous );
el primer argumento es el número de filas, el segundo el número de columnas y el tercero tiene que ver con el tamaño del espacio; si es TRUE, entonces todos los espacios son del mismo tamaño (el del widget mas grande en la tabla), si es FALSE entonces depende del widget mas alto en la fila y el mas ancho en la columna.
El número de filas y columnas se distribuye de la siguiente forma:
0 1 2 0+----------+----------+ | | | 1+----------+----------+ | | | 2+----------+----------+
Para agrega widgets en este plano cartesiano:
void gtk_table_attach ( GtkTable *table, GtkWidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach, GtkAttachOptions xoptions, GtkAttachOptions yoptions, guint xpadding, guint ypadding );
El argumento table es la tabla, child es el widget que añadir a la tabla, left_attach es en que punto del plano comienza y right_attach en que punto termina, horizontalmente, top_attach donde comienza y bottom_attach donde termina, verticalmente.
Por ejemplo para poner un widget en el espacio de abajo y a la izquierda, left_attach = 0, right_attach = 1, top_attach = 1 y bottom_attach = 2.
Los argumentos yoptions y xoptions pueden ser:
GTK_FIL : si la caja en la tabla es mas grande que el widget, el mismo se expande para ocupar el espacio disponible.
GTK_SHRINK : los widgets se ajustan al tamaño de la tabla; cuando la tabla no tiene suficiente espacio los widgets se salen da la ventana.
GTK_EXPAND : la tabla se expandirá para usar todo el espacio de la ventana.
Los argumentos de padding como en las cajas crean espacio alrededor del widget.
La versión corta de la función gtk_table_attach es:
void gtk_table_attach_defaults ( GtkTable *table, GtkWidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach );
esta función tiene como valores por default GTK_FILL | GTK_EXPAND y un padding de 0.
También existe la función gtk_table_set_row_spacing y gtk_table_set_col_spacing, para determinar el espacio entre filas y columnas:
void gtk_table_set_row_spacing ( GtkTable *table, guint row, guint spacing ); void gtk_table_set_col_spacing ( GtkTable *table, guint row, guint spacing );
Para hacer lo mismo pero de forma general para todas las filas o columnas:
void gtk_table_set_row_spacings ( GtkTable *table, guint spacing ); void gtk_table_set_col_spacings ( GtkTable *table, guint spacing );


