IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Pbm de débutant - set label


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut Pbm de débutant - set label
    Bonjour à tous.

    Je suis un peu débutant en programmation GTK, je pige pas grand chose et j'aurais besoin de votre aide.

    J'ai crée avec glade une petite interface basique comportant un label et un bouton et j'aimerais que lorsque l'on clique sur le bouton, le label change...
    C'est un exemple un peu bidon, de base, mais j'apprends... tant bien que mal.
    J'ai lu quelques tuto ici et là, je me suis inspiré d'exemples, mais je coince un peu.

    Problème, je n'arrive pas au résultat, je vous livre mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <gtk/gtk.h>
     
     
    static void clic_bouton (GtkLabel * plabel, gpointer p_lab)
    {
    	const char * str;
    	str = "EJECT";
     
    	//printf("solution %s \n", p_str);
     
    	gtk_label_set_label(GTK_LABEL((GtkLabel*)p_lab), str);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    int main( int argc, char **argv )
    {
        GtkBuilder *builder;
        GtkWidget  *window;
        GtkLabel *label;
        GError     *error = NULL;
     
        /* Init GTK+ */
        gtk_init( &argc, &argv );
     
        /* Create new GtkBuilder object */
        builder = gtk_builder_new();
        /* Load UI from file. If error occurs, report it and quit application.
         * Replace "tut.glade" with your saved project. */
        if( ! gtk_builder_add_from_file( builder, "Test_interface.xml", &error ) )
        {
            g_warning( "%s", error->message );
            g_free( error );
            return( 1 );
        }
     
        /* Get main window pointer from UI */
        window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
        label = GTK_LABEL( gtk_builder_get_object( builder, "label1" ) );
     
        /* Connect signals */
        g_signal_connect(
        		gtk_builder_get_object( builder, "bouton" ),"clicked",
        		G_CALLBACK (clic_bouton),
        	    (GtkLabel*) label
        );
     
        /* Destroy builder, since we don't need it anymore */
        g_object_unref( G_OBJECT( builder ) );
     
        /* Show window. All other widgets are automatically shown by GtkBuilder */
        gtk_widget_show( window );
     
        /* Start main loop */
        gtk_main();
     
        return( 0 );
    }
    J'obtiens l'erreur:

    Gtk-CRITICAL **: gtk_label_set_label: assertion 'GTK_IS_LABEL (label)' failed
    Bon d'après ce que je comprends, j'ai un problème avec ma variable "label", mais où ça je sais pas. Je pense que les experts trouveront vite ce qui cloche dans mon code.

    Merci beaucoup pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Hmm, essaie d'enlever le " g_object_unref( G_OBJECT( builder ) );" pour voir si ça aide (je dis pas que c'est ce qu'il faut faire, je me demande juste si ça peut venir de là ou non)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Malheureusement, pas d'effet

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Bon, j'ai eu du mal à le voir, je pensais que c'était peu être label qui valait NULL et faisait échouer GTK_LABEL (qui effectue un cast et vérifie que la variable est bien convertible dans ce type).

    Et puis pouf, j'ai vu que ce n'était pas à la connexion du signal, mais au niveau de la callback... Le signal "clicked" que tu connectes provient d'un GtkButton, et tu ne respectes pas le prototype de la callback correspondante... Le premier paramètre est l'object qui a reçu le signal, et c'est un bouton.
    Toi tu as mis que c'était un label.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Si je comprends pas bien.

    Donc si je te suis, dans ma fonction clic_bouton, je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void clic_bouton (GtkLabel * plabel, gpointer p_lab)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void clic_bouton (GtkButton * pbutton, gpointer p_lab)
    Si c'est bien ça, pareil j'ai toujours le même problème en fait.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Hum... Bizarre...
    Tu peux mettre un un appel à avant chaque ligne où tu appelles la macro GTK_LABEL, et poster ton code sur http://pastebin.org/ (comme ça on aura les numéros de lignes) ? Indique nous ensuite ici ce que t'affiche le programme, pour savoir à quelle ligne ça pète.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Ok problème réglé,
    J'avais un soucis dans la récupération du label de mon fichier Glade...
    Un truc con... j'ai honte de vous avoir fait perdre du temps ...


    Je commence à piger un peu.

    Merci beaucoup pour votre aide.
    Ce forum est vraiment une aide essentiel ! Bravo à tous les contributeurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gtk set label text:assertion ' gtk is label
    Par cabiste007 dans le forum GTK+
    Réponses: 1
    Dernier message: 29/03/2015, 21h36
  2. [LV 6.1][Débutant] Set/Reset
    Par Griffiths dans le forum LabVIEW
    Réponses: 3
    Dernier message: 29/04/2011, 11h28
  3. [débutant]contenu label = variable + texte
    Par gpgp007 dans le forum C#
    Réponses: 4
    Dernier message: 27/01/2009, 21h16
  4. [débutant] set linesize me fait n'importe quoi
    Par Mathusalem dans le forum Oracle
    Réponses: 6
    Dernier message: 20/04/2006, 16h22
  5. MYSQL 5 alpha Win - pbm création base - Débutant
    Par nerick dans le forum Débuter
    Réponses: 8
    Dernier message: 13/04/2004, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo