Search code examples
user-interfacegtkglade

gtk glade need help


I am using glade to make an user interface.

i have successfully generated the glade file

Now i have to include this file in my C code.

I am using following code:

#include <stdlib.h>
#include<gtk/gtk.h>
int main (int argc, char *argv[])
{
GtkWidget *builder,*window,*button;
gtk_init (&argc, &argv);
builder=gtk_builder_new();
gtk_builder_add_from_file(builder,"shiv.glade",NULL);
window=GTK_WIDGET (gtk_builder_get_object(builder,"window1")) ;
button=GTK_WIDGET (gtk_builder_get_object(builder,"button1"));
g_object_unref(G_OBJECT(builder));
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main ();
return 0;
}

My UI is a simple window having a button without any callback function.

I am getting following errors on execution

GTK-CRITICAL **: IA__gtk_widget_show assertion 'GTK_IS_WIDGET(widget)' failed

Solution

  • Change:

    GtkWidget *builder,*window,*button;
    

    with:

    GtkWidget *window,*button;
    GtkBuilder *builder;
    

    this should fix.

    Example:

    #include <stdlib.h>
    #include <gtk/gtk.h>
    
    static void 
    close_window ( GtkWidget *widget, gpointer window)
    {
        printf("application close...\n");
        gtk_widget_destroy((GtkWidget*)window);
    }
    
    int main (int argc, char *argv[])
    {
        GtkWidget *window, *button;
        GtkBuilder *builder; 
    
        gtk_init (&argc, &argv);
        builder=gtk_builder_new();
        gtk_builder_add_from_file(builder,"a.glade",NULL);
    
        window = GTK_WIDGET (gtk_builder_get_object(builder,"window1")) ;
        button = GTK_WIDGET (gtk_builder_get_object(builder,"button1"));
    
        g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (close_window),window);
        g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window));
    
        g_object_unref(G_OBJECT(builder));
        gtk_widget_show_all( window );
        gtk_main ();
        return 0;
    }
    

    From GTK3 reference manual:
    GtkBuilder — Build an interface from an XML UI definition;
    GtkWidget — Base class for all widgets