Enlazar Glade con código de C.

Imagen de kyroii
0 puntos

Estoy empezando a utilizar glade. Estoy bastante verde, la verdad, por eso pido ayuda.

En primer lugar quiero decir que he leído no se cuantos manuales ya y hay cosas que no termino de entender porque unos manuales tratan con versiones más antiguas de glade (que disponen de algunas herramientas que la versión 3.6 que yo tengo no la tienen) otros explican el código en python... Total que no saco mucho en claro.

Yo llevo desde la universidad programando en C (pero no orientado a objetos pues soy ingeniero electrónco). Y todo lo que se de programación es en c.

Bien, una vez presentado ahí va la pregunta en cuestión:
¿como puedo tratar las señales generadas por los objetos desde el código en c?

1. He creado una sencilla interfaz gráfica con glade, que dispone de una ventana con un label (Hola mundo) y simplemente un botón que quiero que cierre la aplicación. Este archivo se llama: intento.xml

2. Después he creado un archivo de texto llamado main.c con el siguiente código:

#include gtk/gtk.h   

void 
on_window_destroy (GtkObject *object, gpointer user_data)
{
    gtk_main_quit ();
}

int main (int argc, char *argv[])
{
    GtkBuilder      *builder; 
    GtkWidget       *window;

    gtk_init (&argc, &argv);

    builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "intento.xml", NULL);   /* aqui se añade el archivo de glade*/
    window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));/*#aquí se añade el nombre de la ventana principal*/ 
    gtk_builder_connect_signals (builder, NULL);

    g_object_unref (G_OBJECT (builder));
        
    gtk_widget_show (window);      

       
 gtk_main ();

    return 0;
}

3. El siguiente paso ha sido compilarlo con el siguiente código:

gcc main.c -o intento `pkg-config --cflags --libs gtk+-2.0`

PREGUNTA:

¿Que código debo escribir en c para que cuando pulso un botón llamado button1 se cierre la ventana o haga cualquier acción?

Perdonad por la parrafada y gracias de antemano.

Imagen de espeyaps
+1
0
-1

Hola!

En GTK+ para poder comunicar los "objetos" en el programa se usan señales

Estas señales son como en POO los eventos...

/*Un ejemplo para cerrar la ventana con un boton con tu programa*/

#include "gtk/gtk.h"

void on_window_destroy (GtkObject *object, gpointer user_data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window, *boton;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "intento.xml", NULL); /* aqui se añade el archivo de glade*/
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));/*#aquí se añade el nombre de la ventana principal*/
//Importando boton salir en caso de que tu proyecto glade el boton salir sea el button1
boton = GTK_WIDGET(gtk_builder_get_object(builder,"button1"));
//EN ESTA PARTE SE USA LA SEÑAL QUE EN CASO DEL EVENTO DE PRESIONAR EL BOTON, SE CIERRA EL PROGRAMA
gtk_signal_connect(GTK_OBJECT(boton),"destroy",GTK_SIGNAL_FUNC(on_window_destroy);
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (window);
gtk_main ();
return 0;
}

Para lo de que los objetos hagan otra cosa, al igual que la funcion de arriba (on_window_destroy) tienes que escribir tu funcion de que es lo que quieres que haga tu objeto y con la señal la llamas.
Busca en google cada nombre de objeto y en la referencia de GTK aparecen todas sus señales y metodos
Espero que este pequeño ejemplo te ayude, yo tambien estoy aprendiendo GTK+ desde esta semana
Saludos!!!

+1
0
-1