Versión 1.0 - marzo de 2005
Versión 1.1 - marzo de 2015 - Glade 3 no funciona igual
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.
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);
}
make
para compilarlo. En
el directorio src
estará el ejecutable.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");
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 */
make
para compilarlo. En el
directorio src
estará el ejecutable.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").