Search code examples
cgtkgtk3

How to use visibility of any widget on gtk?


I am new on GTK... I want to do hide the label at first and when I will click on the "click" button it will show the label.I used gtk_widget_hide(label)...bt it is not working.and will use fixed container don't change it. here is my code ==>

#include <gtk/gtk.h>

void destroy(GtkWidget* widget,gpointer *data){
    /*gtk_main_quit();*/
    g_print ("hide\n");

}

int main(int argc, char *argv[])
{
    GtkWidget *window,*button,*label,*fixed;

    gtk_init(&argc,&argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Demo");
    gtk_widget_set_size_request(window,200,400);
    gtk_container_set_border_width(GTK_CONTAINER(window),10);

    fixed = gtk_fixed_new();

    button = gtk_button_new_with_mnemonic("Click");
    gtk_widget_set_size_request(button,20,20);

    label = gtk_label_new("BOOM!!");
    gtk_widget_hide(label);

    g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(destroy),NULL);

    gtk_fixed_put(GTK_FIXED(fixed),button,0,0);
    gtk_fixed_put(GTK_FIXED(fixed),label,30,30);

    gtk_container_add(GTK_CONTAINER(window),fixed);


    gtk_widget_show_all(window);

    gtk_main();
    return 0;
}

Solution

  • use gtk_widget_hide() at end of gtk_widget_show_all(window) because u have taken label in Fixed container and Fixed contain is in window.and then u called gtk_widget_show_all(window)thats means show the all contents that have in window....thats why have to use like this===>

    #include <gtk/gtk.h>
    
    void destroy(GtkWidget* label,gpointer *data){
        /*gtk_main_quit();*/
        g_print ("hide\n");
        gtk_widget_show(label);
    
    }
    
    int main(int argc, char *argv[])
    {
        GtkWidget *window,*button,*label,*fixed;
    
        gtk_init(&argc,&argv);
    
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window),"Demo");
        gtk_widget_set_size_request(window,200,400);
        gtk_container_set_border_width(GTK_CONTAINER(window),10);
    
        fixed = gtk_fixed_new();
    
        button = gtk_button_new_with_mnemonic("Click");
        gtk_widget_set_size_request(button,20,20);
    
        label = gtk_label_new("BOOM!!");
    
    
        g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(destroy),label);
    
        gtk_fixed_put(GTK_FIXED(fixed),button,0,0);
        gtk_fixed_put(GTK_FIXED(fixed),label,30,30);
    
        gtk_container_add(GTK_CONTAINER(window),fixed);
    
    
        gtk_widget_show_all(window);
        gtk_widget_hide(label);
        gtk_main();
        return 0;
    }