Crear  Editar  FrontPage  Indexes  Buscar  Cambios  History  RSS  Login

tut-gtk-empaquetado-cajas-detalles

Detalles sobre Empaquetado en Cajas

Debido a su flexibilidad, el empaquetado en GTK puede confundir al principio. Hay muchas opciones, y no resulta obvio como encajan unas con otras. Aun así, en el fondo hay cinco estilos básicos.

packbox1.png

Cada línea contiene una caja horizontal (hbox) con varios botones. La llamada a Gtk::Box#pack en la forma de empaquetar cada uno de los botones en la hbox. Cada uno de los botones se empaqueta dentro de la hbox de la misma forma (p.e. mismos argumentos para el método Gtk::Box#pack_start).

El método Gtk::Box#pack_start tiene la forma:

Gtk::Box#pack_start(child, expand, fill, padding) 

El primer argumento es el objeto que se va a empaquetar en la caja. Por ahora todos los objetos van a ser botones, por lo que estamos empaquetando botones en cajas.

El argumento expand de Gtk::Box#pack_start y Gtk::Box#pack_end controla el lugar en que se situan los widgets dentro de la caja:

Si expand es true

los widget ocuparán todo el espacio extra en la caja, de forma que la caja se expande automáticamente para ocupar todo el área que se le ha asignado;

Si expand es false

la caja se encoge para almacenar solo los widgets.

Dar a expand el valor false te permite justificar los widgets a izquierda o derecha. De otra forma, se expandirán para entrar en la caja, y el mismo efecto se puede conseguir usando tan solo uno de los métodos Gtk::Box#pack_start o Gtk::Box#pack_end.

El argumento fill controla como se ocupa el espacio asignado a cada objeto por la opción expand:

Si fill es true

el objeto se extiende para ocupar todo el espacio posible;

Si fill es false

el objeto se queda con su tamaño original, y se añade un margen extra alrededor.

Hay que tener en cuenta que el argumento fill solo tiene efecto si el argumento expand es true.

Cuando se crea una nueva caja horizontal, se usa:

Gtk::HBox.new(homogeneous, spacing) 

El argumento homogeneous de Gtk::HBox.new (y el mismo de Gtk::VBox.new) controla si cada objeto de la caja tiene el mismo tamaño (p.e. el mismo ancho en una caja horizontal, o el mismo alto en una vertical). Si está activado, los métodos Gtk::Box#pack_start y Gtk::Box#pack_end trabajan como si el argumento expand fuera siempre true.

¿Cual es la diferencia entre spacing (asignado al crear la caja) y padding (asignado cuando los elementos son empauqetados)? Spacing es un espacio que se añade entre objetos, y padding se añade a cada lado de un objeto. La diferencia se ve claramente en la siguiente imágen:

packbox2.png

En la siguiente sección se muestra el código usado para generar las imágenes anteriores. Está muy comentado, por lo que no tendrá problemas para seguirlo.

Ultimas actualizaciones:2011/06/11 16:14:16
Clave:
Referencias:[tut-gtk]