Aprendiendo GTK+: Contenedores

Publicado en C/C++, GTK el 29 de January, 2008 por Fran.

A partir de este capítulo intentaré explicaros los widgets, que considero básicos, de GTK+ y a partir de ahí seréis vosotros quienes tengáis que ampliar conocimientos. Pero antes de eso todavía toca explicar una de las características de GTK+, que quizá le hacen algo especial respecto a otros, son los contenedores.

Los contenedores

Una aplicación GTK+ viene definida por un widget de una ventana (que explicaré más adelante) en el cual se colocan los otros widgets (entradas de texto, etiquetas, botones, …) para formar una interfaz gráfica de usuario. La peculiaridad de GTK+ es cómo se colocan dichos widgets, para ello se hacen uso de otros widgets llamados contenedores, éstos sirven para (como su propio nombre indica) contener otros widgets, de modo que para distribuir los widgets por la ventana primero deberemos colocar algún contenedor sobre el cual insertar dichos widgets. Esto hace de GTK+ diferente a otros lenguajes de interfaces gráficas, en los cuales los widgets se colocan por coordenadas.

Hay varios widgets básicos de contenedores:

  • GtkHBox: Es un contenedor horizontal, quiere decir que los widgets se colocan horizontalmente.
  • GtkVBox: Es un contenedor vertical, quiere decir que los widgets se colocan verticalmente.
  • GtkTable: Crea una tabla de MxN contenedores, los widgets se colocan en la posición AxB que queramos dentro de nuestra tabla MxN. Este se diferencia del resto en las funciones usadas para colocar los widgets, usará las suyas propias en lugar de las de GtkBox que explicaré a continuación.

(Como podéis ver os enlazo a la documentación de la API de GTK+ para cada widget, para mí es el mejor recurso de documentación.)

Los widgets GtkHBox y GtkVBox, como podéis ver en la API, sólo tienen una función asociada:

  • GtkWidget *gtk_hbox_new (gboolean homogeneous, gint spacing);

    Esta función sirve para crear un GtkHBox (para GtkVBox habría que cambiar hbox por vbox en el nombre de la función). Recibe dos parámetros que sirven para que los widgets se distribuyan en tamaños iguales (homogeneous) y para definir los pixels por defecto entre widgets (spacing).

Hay que entender que para que estos widgets ejerzan de contenedores hay que usar las funciones de GtkBox, que es algo así como una interfaz que define operaciones para sus hijos, entre ellos los anteriores widgets. De GtkBox, las funciones más importantes son:

  • gtk_box_pack_start (GtkBox *box, GtkWidget *child, gboolean expand,
    			gboolean fill, guint padding);

    Esta función sirve para colocar widgets de izquierda a derecha (en cualquier GtkHBox) o de arriba a abajo (en cualquier GtkVBox).

  • gtk_box_pack_end (GtkBox *box, GtkWidget *child, gboolean expand,
    			gboolean fill, guint padding);

    Esta función sirve para colocar widgets al revés que la anterior.

Donde los parámetros de cada una de estas funciones son:

  • box: Es el contenedor en el que se va a colocar el widget pasado como parámetro child.
  • child: El widget que queremos colocar en box.
  • expand y fill: Estos parámetros no sabría explicarlos bien, ya que lo mejor es ver el resultado de modificar cada uno. En el ejemplo que dejaré al final podréis comprenderlo mejor.
  • padding: Este es fácil para cualquiera que haya hecho una web, es el espacio (en pixels) que se dejará entre el widget y los vecinos de éste, o el borde del contenedor si es el primero o último.

También existen otras dos funciones que nos ahorran trabajo si queremos dejar los paráemtros por defecto de los contenedores, éstas son:

  • gtk_box_pack_start_defaults (GtkBox *box, GtkWidget *widget);

    Esta función sirve para colocar widgets de izquierda a derecha (en cualquier GtkHBox) o de arriba a abajo (en cualquier GtkVBox).

  • gtk_box_pack_end (GtkBox *box, GtkWidget *widget);

    Esta función sirve para colocar widgets al revés que la anterior.

Para que podáis entender esto mejor os dejo este ejemplo, es el que viene en el tutorial oficial de GTK+.

Un comentario

  1. [...] comencé explicándoos como funcionan las ventanas y los contenedores de GTK+ creo que lo mejor habría sido explicar primero qué son y cómo funcionan los widgets de [...]

    #  Aprendiendo GTK+: Destripando los widgets | 4 bits blog 9 de December, 2008

Escribe un comentario