#include static void hola(); static void destroy(GtkWidget *widget, gpointer data); static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data); struct datos { GtkWidget *entrada; GtkWidget *etiqueta; }; typedef struct datos STRUC; static void print_to_label(STRUC *some_data); int main(int argc, char *argv[]) { /* Se definene los widgets */ GtkWidget *window; GtkWidget *button, *boton; GtkWidget *mainbox, *box; GtkWidget *label; GtkWidget *entrybox; /* Se define la estructura para pasarla al callback */ STRUC *info; /* Se inicia GTK */ gtk_init(&argc, &argv); /* Se crean los widgets */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); mainbox = gtk_vbox_new(FALSE, 0); box = gtk_hbox_new(FALSE, 0); button = gtk_button_new_with_label("Imprimir"); boton = gtk_button_new_with_label("Salir"); label = gtk_label_new("Escribe algo:"); entrybox = gtk_entry_new(); /* Se asignan los datos a la estructura */ info->entrada = entrybox; info->etiqueta = label; /* Se crean las funciones para finalizar el programa */ g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL); /* Se asignan las funciones para los botones */ gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hola), NULL); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(print_to_label), info); gtk_signal_connect(GTK_OBJECT(boton), "clicked", GTK_SIGNAL_FUNC(destroy), GTK_OBJECT(window)); /* Agregamos la etiqueta, la caja de texto y los botones */ gtk_box_pack_start(GTK_BOX(mainbox), label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mainbox), entrybox, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mainbox), box, TRUE, TRUE, 0); /* Agregamos los botones a la caja */ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(box), boton, TRUE, TRUE, 0); /* Se agrega la caja a la ventana */ gtk_container_add(GTK_CONTAINER(window), mainbox); /* Se muestran los widgets */ gtk_widget_show(button); gtk_widget_show(boton); gtk_widget_show(label); gtk_widget_show(entrybox); gtk_widget_show(box); gtk_widget_show(mainbox); gtk_widget_show(window); /* Se ejecuta la aplicacion */ gtk_main(); return 0; } static void hola() { g_print("Este mensaje va a la consola\n"); } static void print_to_label(STRUC *some_data) { /* Iniciamos algunas variables que ayudan */ gchar buffer[50]; GtkWidget *entry; GtkWidget *label; /* Obtenemos los datos y los usamos */ buffer = gtk_entry_get_text(GTK_ENTRY(some_data->entrada)); gtk_label_set_text(GTK_LABEL(some_data->etiqueta), buffer); } static void destroy(GtkWidget *widget, gpointer data) { gtk_main_quit (); } static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { g_print ("delete event occurred\n"); return FALSE; }