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, menues, 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 versin 3, Glade ya no genera lenguaje
C, sino un fichero xml, que posteriormente se carga dinmicamente por el
programa que lo necesite, y este puede estar en diferentes lenguajes de programacin.
De esta manera se tiene una aplicacin grfica que se puede reutilizar para
diferentes lenguajes y adems no es necesario compilar todo el cdigo cada
vez que hay un pequeo cambio en la aplicacin grfica, puesto que se carga
dinmicamente. En este
manual escrito por Micah Carrick se ensea 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, que es la etiqueta
por donde saldrá el resultado */
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 x a la cadena de
caracteres eti */
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.
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ú. Escríbe 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 */
/* Crea el spin_button */
/* Ajusta las características del spin_button */
spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -1e300,
1e300, 1, 0.1, 0.1);
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.
Ahora resulta muy fácil hacer un programa que calcule el
factorial de un número que introduzca el usuario.
Aquí 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").