Initiation à l'environnement Linux

Atelier Informatique de l'Association Escale - 31 140 Pechbonnieu

Interaction entre un Label et un Bouton

Description : Quand on clique sur le bouton « Cliquez ici», le texte du Label change.

Aperçu :
Avant le click de la souris

Après le click de la souris

Commande de compilation : si on a appelé le fichier 'programme.c', on compile le tout en tapant la commande :

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

(le signe " ` " s'obtient avec la combinaison des touches AltGr+7).

On exécute avec ./programme.c


Code source :

#include <gtk/gtk.h>

/* Declaration de la fonction */
void changer_texte(GtkWidget *BoutonCliquezMoi, GtkWidget *Label)
{
        gtk_label_set_text( GTK_LABEL(Label), "Le monde va bien!");
}

/* Programme principal */
int main( int   argc, char *argv[] )
{
        /* Declaration des variables */
        GtkWidget *fenetre;
        GtkWidget *boite;
        GtkWidget *label;
        GtkWidget *boutonCliquezMoi;
    
        /* Initialisation de la bibliotheque */
        gtk_init (&argc, &argv);
    
        /* Creation des objets */
        fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        boite = gtk_vbox_new(FALSE, 5);
        label = gtk_label_new("Comment va le monde?");
        boutonCliquezMoi = gtk_button_new_with_label("Cliquez ici");

        /* Attachement des objets a la fenetre principale et a la boite */
        gtk_container_add (GTK_CONTAINER (fenetre), boite);
        gtk_box_pack_start( GTK_BOX(boite), label, FALSE, FALSE, 0);
        gtk_box_pack_start( GTK_BOX(boite), boutonCliquezMoi, FALSE, FALSE, 0);

        /******* CONNEXION DES SIGNAUX *******/
        /* Termine l'application lorsque l'on ferme la fenetre */    
        g_signal_connect ( G_OBJECT (fenetre), "destroy",
                        G_CALLBACK (gtk_main_quit), NULL );
        /* Connexion du signal du bouton Cliquez Moi */
        g_signal_connect ( G_OBJECT (boutonCliquezMoi), "clicked",
                        G_CALLBACK (changer_texte), G_OBJECT(label) );

        /* Affiche la fenetre */
        gtk_widget_show_all  (fenetre);

        /* Boucle principal */    
        gtk_main ();
}