RubyLit - Ruby.del.litoral!
Empaquetando con Table

Introducción

El empaquetado con tablas suele ser uno de los inconvenientes con los que se encuentran los principiantes en programación GTK, los programadores de Ruby GTK no se escapan de la regla.

Entiendo que la dificultad parte de la documentación poco clara, intentaré en este apartado aclarar el tema.

pero vamos por parte, primero vamos a ver que nos provee la api de Ruby GTK para:

Crear una Tabla


Gtk::Table.new(rows, columns, homogeneous = false)

Bien, ahora vamos a crear una tabla y vamos a identificar los componentes fundamentales, como sabemos las tablas estan compuestas por filas y columnas, pero lo que a nosotros nos importa es que está formada por líneas verticales y horizontales!

Creando una tabla de 4 filas y 3 columnas

mi_tabla = Gtk::Table.new(4, 3)

          0        1        2        3
          |        |        |        |
          | col 1  | col 2  | col 3  |
0 --------+--------+--------+--------+----
      f 1 |        |        |        |
1 --------+--------+--------+--------+----
      f 2 |        |        |        |
2 --------+--------+--------+--------+----
      f 3 |        |        |        |
3 --------+--------+--------+--------+----
      f 4 |        |        |        |
4 --------+--------+--------+--------+----
          |        |        |        |

agregando widget a la tabla

En la api tenemos dos metodos para agregar widgets a la tabla

attach(child, left, right, top, bottom, xopt = Gtk::EXPAND|Gtk::FILL, yopt = Gtk::EXPAND|Gtk::FILL, xpad = 0, ypad = 0)

attach_defaults(widget, left, right, top, bottom)

usaremos attach_default por simplicidad.

Para agregar una etiqueta (Label), en la columna 3 y fila 1 podríamos usar las siguientes instrucciones.

mi_tabla = Gtk::Table.new(4, 3)

mi_etiqueta = Gtk::Label.new("Hola Ruby")

mi_tabla.attach_defaults(mi_etiqueta, 2, 3, 0, 1)

En este ejemplo se debe notar que los valores 2 y 3 no hacen referencia a las columnas de la tabla sino a las líneas que delimitan la columna 3.

Lo mismo ocurre con los valores 0 y 1, ellos delimitan la primera fila!

el siguiente ejemplo, levemente mas complejo, pone una etiqueta en cada columna cavite housing

mi_tabla = Gtk::Table.new(4, 3)

mi_tabla.attach_defaults(Gtk::Label.new("col 3"), 2, 3, 0, 1)
mi_tabla.attach_defaults(Gtk::Label.new("col 2"), 1, 2, 1, 2)
mi_tabla.attach_defaults(Gtk::Label.new("col 1"), 0, 1, 2, 3)

En el siguiente ejemplo la etiqueta ocupará totalmente la fila 2.

mi_tabla = Gtk::Table.new(4, 3)

mi_tabla.attach_defaults(Gtk::Label.new("en fila 2"), 0, 3, 1, 2)

Y eso es todo. Recuerden que lo importante es que los parametros de attach y attach_defaults esperan valores de las líneas que delimitan filas y columnas.