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 :

Probleme ajout label dans une fenetre


Sujet :

GTK+ avec C & C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut Probleme ajout label dans une fenetre
    Bonjour � tous,

    Je d�bute dans le programmation avec gtk+2.
    J'ai fais une fenetre, j'aimerais y ajouter un label mais �a plante..la compilation passe nickel mais j'ai �a � l'�x�cution :
    (prog:5761): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkContainer'

    (prog:5761): Gtk-CRITICAL **: gtk_container_add: assertion `GTK_IS_CONTAINER (container)' failed
    Et aucun label..

    Voici 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
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include <gtk/gtk.h>
     
    /*Déclarations des fonctions*/
    void fermetureFenetre(GtkWidget *pFenetre,gpointer data);
    void afficherFenetre(GtkWidget *pFenetre,const gchar *titre, int largeur,int hauteur);
    void afficherLabel(GtkWidget *pLabel,GtkWidget *pFenetre, const char *texte);
     
    /*Fonction qui ferme le fenetre*/
    void fermetureFenetre(GtkWidget *pFenetre,gpointer data)
    {
        gtk_main_quit();
    }
     
    /*Fonction qui affiche une fenetre*/
    void afficherFenetre(GtkWidget *pFenetre,const gchar *titre, int largeur, int hauteur)
    {
      /*Initialisation*/
      pFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); //création
      gtk_window_set_title(GTK_WINDOW(pFenetre),titre); //titre fenetre
      gtk_window_set_default_size(GTK_WINDOW(pFenetre),largeur,hauteur); //taille
      gtk_window_set_position(GTK_WINDOW(pFenetre),GTK_WIN_POS_CENTER); //position centrée
     
      /*Connection du signal de fermeture*/
      g_signal_connect(G_OBJECT(pFenetre),"destroy",G_CALLBACK(fermetureFenetre),NULL);
     
      /*Affichage fenetre*/
      gtk_widget_show_all(pFenetre);
    }
     
    /*Fonction qui affiche un label dans une fenetre*/
    void afficherLabel(GtkWidget *pLabel, GtkWidget *pFenetre, const char *texte)
    {
      pLabel = gtk_label_new("texte"); //création du label
      gtk_container_add(GTK_CONTAINER(pFenetre),pLabel); //ajout du label dans la fenetre
    }
     
     
     
    int main(int argc, char *argv[] )
    {
      /*Déclaration des variables*/
        GtkWidget *pFenetrePrincipale;
        GtkWidget *pLabelIP;
     
     
      /*Initialisation de GTK*/
      gtk_init(&argc,&argv);
     
      /*Affichage de la fenetre*/
      afficherFenetre(pFenetrePrincipale,"Fenetre principale",400,400);
      /*Ajout du label*/
      afficherLabel(pLabelIP,pFenetrePrincipale,"Entrez l'IP du serveur");
     
      /*Lancement de la boucle evennementille infini*/
      gtk_main();
     
      /*Fin du programme sans erreur*/
      return 0;
    }
    Voila, j'espere que c'est rien de m�chant..merci pour votre aide
    Sorry

  2. #2
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut
    Salut

    Je pense que �a vient du fait que tu cr�es ta fen�tre dans une fonction (la premi�re). Donc quand tu y sors, la fen�tre n'existe plus.
    Il faudrait passer l'adresse de la fen�tre (ce qui donne un GtkWidget**) ou bien retourner son adresse.
    De plus (sans rapport avec le probl�me), il faut enlever les guillemets pour le texte du label si t'utilises la chaine texte

    Nas'

  3. #3
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Oui pour les guillemets je sais je les avais mis pour voir si �a changeait quelque chose au probleme

    Je vais essayer de faire comme tu m'as dit.
    Merci

  4. #4
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    J'ai remplac� comme cela :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #include <gtk/gtk.h>
     
    /*Déclarations des fonctions*/
    void fermetureFenetre(GtkWidget *pFenetre,gpointer data);
    void afficherFenetre(GtkWidget **pFenetre,const gchar *titre, int largeur,int hauteur);
    void afficherLabel(GtkWidget *pLabel,GtkWidget **pFenetre, const char *texte);
     
    /*Fonction qui ferme le fenetre*/
    void fermetureFenetre(GtkWidget *pFenetre,gpointer data)
    {
        gtk_main_quit();
    }
     
    /*Fonction qui affiche une fenetre*/
    void afficherFenetre(GtkWidget **pFenetre,const gchar *titre, int largeur, int hauteur)
    {
      /*Initialisation*/
      *pFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); //création
      gtk_window_set_title(GTK_WINDOW(pFenetre),titre); //titre fenetre
      gtk_window_set_default_size(GTK_WINDOW(pFenetre),largeur,hauteur); //taille
      gtk_window_set_position(GTK_WINDOW(pFenetre),GTK_WIN_POS_CENTER); //position centrée
     
      /*Connection du signal de fermeture*/
      g_signal_connect(G_OBJECT(pFenetre),"destroy",G_CALLBACK(fermetureFenetre),NULL);
    }
     
    /*Fonction qui affiche un label dans une fenetre*/
    void afficherLabel(GtkWidget *pLabel, GtkWidget **pFenetre, const char *texte)
    {
      pLabel = gtk_label_new(texte); //création du label
      gtk_container_add(GTK_CONTAINER(pFenetre),pLabel); //ajout du label dans la fenetre
    }
     
     
     
    int main(int argc, char *argv[] )
    {
      /*Déclaration des variables*/
        GtkWidget **pFenetrePrincipale;
        GtkWidget *pLabelIP;
     
     
      /*Initialisation de GTK*/
      gtk_init(&argc,&argv);
     
      /*Affichage de la fenetre*/
      afficherFenetre(pFenetrePrincipale,"Fenetre principale",400,400);
      /*Ajout du label*/
      afficherLabel(pLabelIP,pFenetrePrincipale,"Entrez l'IP du serveur");
      gtk_widget_show_all(*pFenetrePrincipale);
      /*Lancement de la boucle evennementille infini*/
      gtk_main();
     
      /*Fin du programme sans erreur*/
      return 0;
    }
    Maintenant j'ai une erreur de segmentation
    J'ai du mal faire...

  5. #5
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut
    Normal Il faut garder le GtkWidget* dans le main mais passer son adresse.
    Donc ta fonction est bonne (sauf qu'il faut ajouter une �toile partout o� t'utilises ta fen�tre (taille, titre...)) mais dans le main :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    GtkWidget *pFenetrePrincipale; 
    /* ... */
    afficherFenetre(&pFenetrePrincipale,"Fenetre principale",400,400);
    /* ... */
    gtk_widget_show_all(pFenetrePrincipale);
    Nas'

  6. #6
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Ok je vais essayer
    Merci

  7. #7
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Alors,
    Ma fonction d'affichage de la fenetre est comme cela :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void afficherFenetre(GtkWidget **pFenetre,const gchar *titre, int largeur,int hauteur);
    Et son appel :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    GtkWidget *pFenetrePrincipale;
    /*...*/
    afficherFenetre(&pFenetrePrincipale,"Fenetre principale",400,400);
    Erreur de compilation(enfin warning)
    cc1: warnings being treated as errors
    main.c: In function �afficherFenetre�:
    main.c:18: attention : assignment from incompatible pointer type
    Je dois encore une fois mal faire quelque chose..

  8. #8
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut
    T'as vu que j'avais �dit� mon dernier message? Il faut modifier toutes les occurences de ta fen�tre dans la fonction (rajouter une �toile). Peut-�tre est-ce cela car l'appel est bon.

    Nas'

  9. #9
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Ok j'avais pas vu mais j'aurais du y penser

    Alors re-voila la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*Fonction qui affiche une fenetre*/
    void afficherFenetre(GtkWidget **pFenetre,const gchar *titre, int largeur, int hauteur)
    {
      /*Initialisation*/
      *pFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); //création
      gtk_window_set_title(GTK_WINDOW(*pFenetre),titre); //titre fenetre
      gtk_window_set_default_size(GTK_WINDOW(*pFenetre),largeur,hauteur); //taille
      gtk_window_set_position(GTK_WINDOW(*pFenetre),GTK_WIN_POS_CENTER); //position centrée
     
      /*Connection du signal de fermeture*/
      g_signal_connect(G_OBJECT(*pFenetre),"destroy",G_CALLBACK(fermetureFenetre),NULL);
    }
    Ca fonctionne parfaitement. Merci pour ton aide.
    Juste une question, je debute sur gtk, c'est une bonne �criture ? je veux dire de faire des fonctions comme �a, puis d'afficher tout � la fin, ou il y a mieux ?

    Sorry

  10. #10
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Ah j'oubliais, il y a moyen de positionner le label o� on veut ?
    Car au final je veux mettre 2 zones de saisies, avec donc un label juste au dessus de chacune..donc il faudrait pouvoir mettre des coordonn�es

  11. #11
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut
    Je ne suis pas expert en GTK donc...
    Mais �a me semble bien de faire des fonctions. Cependant, comme tu d�butes, je pense que tu n'as pas encore abord� les boxes et tables.
    Car pour ajouter plusieurs composants (2 labels par exemple), il faut passer par ce m�canisme et non par la fonction gtk_container_add().
    Mais quoiqu'il en soit, d�composer en plusieurs sous-programmes, c'est tr�s bien
    EDIT : pour placer les composants, faut justement passer par les tables ou boxes

    Nas'

  12. #12
    Membre �clair� Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par d�faut
    Les boxes et les tables..ok je vais voir �a.
    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [XL-2007] Ajouter un login + Mot de passe dans une fenetre
    Par lenovo49 dans le forum Macros et VBA Excel
    R�ponses: 17
    Dernier message: 15/11/2011, 14h09
  2. R�ponses: 1
    Dernier message: 14/02/2011, 09h28
  3. probleme de disposition avec GridBagLayout dans une fenetre
    Par thierry_b dans le forum Agents de placement/Fen�tres
    R�ponses: 4
    Dernier message: 17/07/2009, 11h08
  4. Ajouter un image dans une fenetre
    Par AbouraStat dans le forum AWT/Swing
    R�ponses: 2
    Dernier message: 13/05/2009, 20h49
  5. Probleme d'affichage d'image dans une fenetre
    Par cgregueusse dans le forum MFC
    R�ponses: 1
    Dernier message: 03/08/2005, 11h08

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