Diseño de interfaces gráficas con GTK y Glade

written by uve 21 March 2011

Continuando con la serie de artículos acerca de GTK, voy a seguir con Glade. Glade es una herramienta que nos permite crear las interfaces gráficas de forma gráfica :)

Esta herramienta es parte oficial de Gnome y se integra bastante bien con Anjuta, aunque esto no viene al caso. Glade genera archivos xml, que después, de forma simple y sencilla podremos cargar en nuestra aplicación. Estos ficheros pueden tener cualquier nombre y/o extensión, aunque tal vez la extensión más usada sea .ui (de User Interface) y será la que yo utilice.

Dado que ya expliqué como se realiza la compilación para GTK en el primer artículo, no lo volveré a explicar. Si alguien tiene dudas puede consultarlo aquí.

Código fuente

¿Qué necesitamos instalar? Evidentemente, Glade:

$ sudo apt-get install glade

Ahora tendremos la herramienta disponible en Aplicaciones > Programación. La abrimos e indicamos que queremos utilizar GtkBuilder y que la versión del catálogo gtk+ es la 2.16. Aquí ya podemos diseñar todo aquello que se nos ocurra, la imaginación es libre.

Para este ejemplo, me voy a conformar con recrear el que hice para el artículo Diseño de interfaces gráficas con GTK. Así que creamos una nueva ventana. Para ello, en la paleta de la izquierda, dentro de 'Niveles superiores', hacemos click sobre 'Ventana'.

Nos aparecerá una ventana nueva, cuyas propiedades podremos modificar en el panel inferior de la parte derecha. Yo he utilizado los siguientes:

  • Nombre: ventanaPrincipal
  • Título de la ventana: Primer ejemplo GTK - Menudo Problema
  • Posición de la ventana: Centrar siempre
  • Anchura predeterminada: 400
  • Altura predeterminada: 300

Si nos fijamos, son los mismos atributos que utilicé en el primer ejemplo, pero esta vez, se han añadido a través de la interfaz gráfica, por lo que ya no es necesario introducirlos mediante llamadas a funciones. Una vez lista la interfaz, la vamos a guardar en el mismo directorio donde estén nuestros fuentes. En mi caso, la he llamado main.ui, fichero que cargará la aplicación para generar la interfaz.

Y ahora vamos a ver el código correspondiente:

#include <gtk/gtk.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    GtkBuilder *gtkBuilder;
    GtkWidget *ventanaPrincipal;

    // Inicializamos de GTK
    gtk_init(&argc, &argv);

    // Inicializamos del constructor de interfaces, GtkBuilder
    gtkBuilder= gtk_builder_new();
    // Añadimos el fichero con la interfaz gráfica
    gtk_builder_add_from_file(gtkBuilder, "main.ui", NULL);

    // Recuperamos la ventana
    ventanaPrincipal = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "ventanaPrincipal"));
    // Todo esto está definido a través de Glade. Ya no es necesario
    //gtk_window_set_default_size(GTK_WINDOW(ventanaPrincipal), 400, 300);
    //gtk_window_set_title(GTK_WINDOW(ventanaPrincipal), "Primer ejemplo GTK - Menudo Problema");
    //gtk_window_set_position(GTK_WINDOW(ventanaPrincipal), GTK_WIN_POS_CENTER_ALWAYS);

    // Conectamos la señal "destroy"
    gtk_signal_connect(GTK_OBJECT(ventanaPrincipal), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    // Se hace visible la ventana
    gtk_widget_show_all(ventanaPrincipal);

    // Se inicia el bucle principal de GTK
    gtk_main();

    return EXIT_SUCCESS;
}

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.