Inicio

Versión 1.0 - marzo de 2005

Versión 1.1 - marzo de 2015 - Glade 3 no funciona igual

Creación de aplicaciones gráficas con Glade2

Cuando creamos un programa, por ejemplo en C, tenemos un programa que se ejecuta en una terminal y que solo muestra texto.

Si queremos crear una aplicación gráfica, en GNU/Linux es fácil con Glade o con Glade2 (Glade me da problemas al compilar el código, pero como Glade2 funciona perfectamente...). En Debian se encuentra disponible en el gestor de paquetes y si no directamente en http://glade.gnome.org.

Con Glade lo que hacemos es crear una ventana, añadirle botones, añadirle entradas y salidas de datos, menus, etc. A continuación guardamos los datos y pinchamos para que construya el código fuente. Ahora compilamos dicho código fuente y ya tenemos nuestra aplicación gráfica, que lógicamente no hace nada. Ahora es cuando tenemos que escribir el código de lo que realmente hace el programa. Lo importante es que Glade nos crea la interfaz gráfica en lenguaje C, por tanto el resultado es un programa íntegramente escrito en C. Con la versión 3, Glade ya no genera lenguaje C, sino un fichero xml, que posteriormente se carga dinámicamente por el programa que lo necesite, y este puede estar en diferentes lenguajes de programación. De esta manera se tiene una aplicación gráfica que se puede reutilizar para diferentes lenguajes y además no es necesario compilar todo el código cada vez que hay un pequeño cambio en la aplicación gráfica, puesto que se carga dinámicamente. En este manual escrito por Micah Carrick se enseña Glade3.

Este estupendo manual escrito por Eddy Ahmed y traducido por Waldo Ramírez te enseñará paso a paso cómo usar Glade2.

Mostrar resultados numéricos

Si quieres que tu programa muestre un número, aquí tienes un ejemplo sencillo. El programa calcula el factorial de 10. El resultado lo muestra a través de una etiqueta.

Primero crea en Glade el programa. Por ejemplo ponle una etiqueta que diga lo que hace el programa, otra para mostrar el resultado, un botón para calcular y otro para salir.

El código que tienes que poner en la función on_button1_clicked es:

 
void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{

/* Creamos un puntero de tipo GtkWidget llamado etiqueta que apunta a label2 */
GtkWidget * etiqueta = lookup_widget(GTK_WIDGET(button),"label2");

/* Creamos un vector de tipo cadena para guardar el número como una cadena de caracteres */
gchar eti[50];

/* Código del factorial*/
        int i;
        double id, x;
        x=1;
        for (i=1;i<=10;i++) {
                id=i;
                x=x*id;
        }
        
        
/* sprintf pasa el número a la cadena de caracteres */
sprintf(eti,"%e\n", x);

/* gtk_label_set_text escribe eti en label2, usando el puntero etiqueta */
gtk_label_set_text(GTK_LABEL(etiqueta),eti);

}


Si lo prefieres aquí tienes el programa entero (377,7 KiB). Ábrelo con Anjuta o si no abre una terminal, entra en el directorio y teclea make para compilarlo. En el directorio src estará el ejecutable.

Obtener números

Si quieres que tu programa lea un número que introduce el usuario, lo mejor es usar una entrada numérica, llamada spin_button. En Glade 2.6.0 no existe ese icono (o al menos yo no lo encontré), así que hay que escribir el código manualmente).

Aquí está el código que tienes que escribir en el fichero interface.c. Primero crea tu programa con Glade, porque si luego quieres modificar algo, Glade te borra lo que hayas puesto tú. Escribe el código en el lugar adecuado (compara con el código que te creó Glade).

GtkWidget *spin_button1;
GtkAdjustment *spinner_adj;   /* Depende del orden en que lo pongas entre las cajas verticales, irá en un sitio o en otro */

/* Ajusta las características del spin_button*/
spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -1e300, 1e300, 1, 0.1, 0.1);

/* Crea el spin_button */
spin_button1 = gtk_spin_button_new (spinner_adj, 0.001, 6);

gtk_widget_show (spin_button1);   /* Le dice dónde mostrarlo */
gtk_box_pack_start (GTK_BOX (vbox1), spin_button1, TRUE, TRUE, 0);

/* Permite que se pueda llamar mediante lookup_widget() */
GLADE_HOOKUP_OBJECT (window1, spin_button1, "spin_button1"); 

Ahora para poder usar el número en callbacks.c escribe, en la función donde te haga falta, lo siguiente:

/* Creamos un puntero de tipo GtkWidget llamado entrada_numerica que apunta a spin_button1 */
GtkWidget * entrada_numerica = lookup_widget(GTK_WIDGET(button),"spin_button
gdouble x;

/* Obtenemos el valor del spin_button */
x=gtk_spin_button_get_value(entrada_numerica);

/* Y ya tenemos el número almacenado en la variable x */

Si lo prefieres aquí tienes el programa entero (378,4 KiB). Ábrelo con Anjuta o si no abre una terminal, entra en el directorio y teclea make para compilarlo. En el directorio src estará el ejecutable.

Un ejemplo un poco más practico: calcular el factorial de un número

Ahora resulta muy fácil hacer un programa que calcule el factorial de un número que introduzca el usuario. Aqí­ tienes el programa entero (378,5 KiB). Ábrelo con Anjuta o si no abre una terminal, entra en el directorio y teclea make para compilarlo. En el directorio src estará el ejecutable. Puse código de control para evitar números negativos y para calcular corrctamente el factorial de cero, pero no para evitar números reales ni tampoco para avisar de overflow (suele poner "inf").

Inicio

HTML5 Powered