Un programa GNOME es una aplicación GUI (interfaz gráfico de usuario) para GTK+ que hace uso de las bibliotecas GNOME. Las bibliotecas GNOME hacen posible tener un aspecto similar entre aplicaciones y hacen las cosas más sencillas y fáciles de programar. Además las bibliotecas GNOME añaden una completa gama de widgets que extiende el conjunto de widgets que ofrece GTK+.
El siguiente programa crea una ventana GNOME básica y añade una caja horizontal dentro de la cual se incluyen dos botones, los cuales (cuando son presionados) imprimen una cadena hacia la salida estándar del terminal desde el que comenzó la aplicación. La semántica y la estructura de un programa GNOME es muy similar a la programación pura en GTK+.
Necesitará compilar este código, así que debería mirar el capítulo Construyendo Aplicaciones GNOME para obtener mas información sobre como realizar este paso. Aquí tiene un sencillo Makefile que compilará buttons.c para usted. Para compilar otros ejemplos, sólo cambie 'buttons' por el nombre apropiado.
CFLAGS=-g -Wall `gnome-config ––cflags gnome gnomeui` LDFLAGS=`gnome-config ––libs gnome gnomeui` all: buttons |
Y aquí esta buttons.c:
/* * Sencillo programa GNOME, no integrado en el árbol GNOME, sin usar i18n * buttons.c */ /* La cabecera GNOME más sencilla */ #include <gnome.h> /* una llamada para los botones */ static void button_clicked(GtkWidget *button, gpointer data) { /* la cadena que se imprimirá es pasada por el campo 'data' */ char *string = data; /* imprime una cadena en la salida estándar*/ g_print(string); } /* llamada cuando el usuario cierra la ventana*/ static gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { /* señal al bucle principal para salir*/ gtk_main_quit(); /* devuelve FALSE para continuar cerrando la ventana */ return FALSE; } int main(int argc, char *argv[]) { GtkWidget *app; GtkWidget *button; GtkWidget *hbox; /* Inicializa GNOME, esto es muy parecido a gtk_init */ gnome_init ("buttons-basic-example", "0.1", argc, argv); /* Crea un widget GNOME, el cual establece una ventana básica para su aplicación*/ app = gnome_app_new ("buttons-basic-example", "Aplicación GNOME Básica"); /* conecta "delete_event", el cual es el evento que se obtiene cuando el usuario cierra la ventana desde el gestor de ventanas, con gtk_main_quit (La función que provoca que el bucle gtk_main salga, y consecuentemente termine la aplicación)*/ gtk_signal_connect (GTK_OBJECT (app), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); /* crea una caja horizontal para los botones y la añade dentro de la aplicación del widget*/ hbox = gtk_hbox_new (FALSE,5); gnome_app_set_contents (GNOME_APP (app), hbox); /* crea un botón y lo añade a la caja horizontal */ button = gtk_button_new_with_label("Botón 1"); gtk_box_pack_start (GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (button_clicked), "Botón 1\n"); /* y otro botón*/ button = gtk_button_new_with_label("Botón 2"); gtk_box_pack_start (GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (button_clicked), "Botón 2\n"); /* muestra todo dentro de este widget y el widget mismo */ gtk_widget_show_all(app); /* entra en el bucle principal */ gtk_main (); return 0; } |
Por favor, observe el uso de gnome_init en lugar de gtk_init, y del widget GnomeApp en lugar del GtkWindow habitual. Entraremos en detalle sobre esto mas tarde.