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 :

Petit soucis avec gtktable.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut Petit soucis avec gtktable.
    Bonjour tout le monde

    Je ne mais pas tout le code car j'ai 89 lignes.

    je ne mets que les codes concernant gtktable.

    Mon probleme est que rien ne s'affichent, et j'ai des erreurs d'execution..

    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
     
    s->position = gtk_table_new(15,3,TRUE);   
     gtk_container_add(GTK_CONTAINER(s->win),GTK_WIDGET(s->position));
     
      GtkWidget *quit[1];
     
    quit[13] =  GTK_WIDGET(gtk_tool_button_new(imgquit,"Quitter"));    
    g_signal_connect(
          G_OBJECT(quit),
          "clicked",
          G_CALLBACK(gtk_main_quit),
          NULL
       );     
     
     gtk_table_attach_defaults(GTK_TABLE(s->position),quit[13],1,2,14,15);
    J'ai regardé un tuto.

    Que manque t'il?

    cordialement

    A bientôt

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ici:
    Tu as un tableau de pointeurs de 1 indice or, tu en utilises 13 dans ton code, c'est soit l'un soit l'autre mais une des deux valeur est fausse !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Bonjour tout le monde

    Ca ne fonctionne toujour pas.

    J'ai une erreur d'execution.

    Voici le 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
    60
    61
    62
    63
    64
    65
     
    #include "strut_win.h"
    #include <gtk/gtk.h>
     
     
     
    void appli(struc * s)
    {
     GtkWidget *imgquit;
     GtkWidget *imgconvertion;     
     GtkWidget *sommeaconvertir[1];   
     GtkWidget *resultat[1];    
     
     s->position = gtk_table_new(15,3,TRUE);   
     gtk_container_add(GTK_CONTAINER(s->win),GTK_WIDGET(s->position));
     
     sommeaconvertir[0] = gtk_text_view_new();  
     
     
     
     
     
     resultat[1] = gtk_text_view_new();    
     
     
     s->barre = gtk_hseparator_new(); 
     
     
     s->eurodollard[2]=gtk_radio_button_new_with_label(NULL,"Eurro=>Dollard");
     
     
     s->dollardeuro[3] = gtk_radio_button_new_with_label(NULL,"Dollard=>Eurro"); 
     
     
     
     s->euroyen[4] = gtk_radio_button_new_with_label(NULL,"Eurro=>Yen");
     
     
     s->yeneuro[5] = gtk_radio_button_new_with_label(NULL,"yen=>euro");
     
     
      s->barre = gtk_hseparator_new(); 
     gtk_box_pack_start (GTK_BOX (s->vbox), s->barre, TRUE, TRUE, 0); 
     
     
     
     imgconvertion =  gtk_image_new_from_file("./icon/imgconvert.gif");
     
     s->converse[14] = GTK_WIDGET(gtk_tool_button_new(imgconvertion,"Convertion")); 
      gtk_table_attach_defaults(GTK_TABLE(s->position), s->converse[14],0,1,14,15);  
     
     
     
    imgquit =  gtk_image_new_from_file("./icon/quit_gif.gif");  
     
    s->quit[13] =  GTK_WIDGET(gtk_tool_button_new(imgquit,"Quitter"));    
    g_signal_connect(
          G_OBJECT(s->quit),
          "clicked",
          G_CALLBACK(gtk_main_quit),
          NULL
       );     
     
     gtk_table_attach_defaults(GTK_TABLE(s->position),s->quit[13],1,2,14,15);      
    }
    Pourquoi ca me fait cet erreur.

    Cordialement

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Pourrais-tu fournir le code complet compilable s-il te plaît ? Je n'ai pas envie de réécrire la moitié de l'application pour pouvoir tester et voir ce qui cloche

    Si c'est trop gros, fait un zip et met-le en pièce jointe
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Bonsoir tout le monde




    Voici strut_win.h

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    #ifndef strut_win_H
    #define strut_win_H
     
    typedef struct 
    {
      GtkWidget *menubar;       
      GtkWidget *menu;       
      GtkWidget *separe;        
      GtkWidget *quit[13];
      GtkWidget *convert;
      GtkWidget *hbox;
      GtkWidget *vbox;
      GtkWidget *menuiteminfo;
      GtkWidget *menuitemchange;
      GtkWidget *menuitemfile;
      GtkWidget *win;
      GtkWidget *icoaide;
      GtkWidget *menuitemaide;
      GtkWidget *converse[1];
      GtkWidget *somme;      
      GtkWidget *icoinfo;
      GtkWidget *menuinfo;
      GtkWidget *menuchange;
      GtkWidget *menuitemlicence; 
      GtkWidget *icolicence;
      GtkWidget *change;
      GtkWidget *menuitem;
      GtkWidget *files;  
      GtkWidget *menuquit;
      GtkWidget *icomenuquit;
      GtkWidget *barre;
     
     
      GtkWidget *eurodollard[2];
      GtkWidget *dollardeuro[3];
      GtkWidget *euroyen[4];
      GtkWidget *yeneuro[5];
      GtkWidget *eurodollardaustr[6];
      GtkWidget *dollardaustreuro[7];
      GtkWidget *eurodollardcanadian[8];
      GtkWidget *dollardcanadianeuro[9];
      GtkWidget *eurodinar[10];
      GtkWidget *dinareuro[11];
     
      GtkWidget *position;      
     
    }struc;     
     
    void menu(struc * s);
    void info(GtkWidget * widget, gpointer data);
    void taux(GtkWidget * widget, gpointer data);
    void licence(GtkWidget * widget, gpointer data);
    void appli(struc * s);
    #endif

    Voici wind.c

    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
    60
    61
    62
    63
    64
    65
     
    #include "strut_win.h"
    #include <gtk/gtk.h>
     
     
     
    void appli(struc * s)
    {
     GtkWidget *imgquit;
     GtkWidget *imgconvertion;     
     GtkWidget *sommeaconvertir[1];   
     GtkWidget *resultat[1];    
     
     s->position = gtk_table_new(15,3,TRUE);   
     gtk_container_add(GTK_CONTAINER(s->win),GTK_WIDGET(s->position));
     
     sommeaconvertir[0] = gtk_text_view_new();  
     
     
     
     
     
     resultat[1] = gtk_text_view_new();    
     
     
     s->barre = gtk_hseparator_new(); 
     
     
     s->eurodollard[2]=gtk_radio_button_new_with_label(NULL,"Eurro=>Dollard");
     
     
     s->dollardeuro[3] = gtk_radio_button_new_with_label(NULL,"Dollard=>Eurro"); 
     
     
     
     s->euroyen[4] = gtk_radio_button_new_with_label(NULL,"Eurro=>Yen");
     
     
     s->yeneuro[5] = gtk_radio_button_new_with_label(NULL,"yen=>euro");
     
     
      s->barre = gtk_hseparator_new(); 
     gtk_box_pack_start (GTK_BOX (s->vbox), s->barre, TRUE, TRUE, 0); 
     
     
     
     imgconvertion =  gtk_image_new_from_file("./icon/imgconvert.gif");
     
     s->converse[14] = GTK_WIDGET(gtk_tool_button_new(imgconvertion,"Convertion")); 
      gtk_table_attach_defaults(GTK_TABLE(s->position), s->converse[14],0,1,14,15);  
     
     
     
    imgquit =  gtk_image_new_from_file("./icon/quit_gif.gif");  
     
    s->quit[13] =  GTK_WIDGET(gtk_tool_button_new(imgquit,"Quitter"));    
    g_signal_connect(
          G_OBJECT(s->quit),
          "clicked",
          G_CALLBACK(gtk_main_quit),
          NULL
       );     
     
     gtk_table_attach_defaults(GTK_TABLE(s->position),s->quit[13],1,2,14,15);      
    }

    Voici le main

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include "strut_win.h"
     
     
     
    void appli(struc * s);
     
     
    int main (int argc, char *argv[])
    {
     
     struc s;
     
     
     
     
     
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
      gtk_init (&argc, &argv);
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
     
     
      s.win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_container_set_border_width (GTK_CONTAINER (s.win), 8);
      gtk_window_set_default_size(GTK_WINDOW (s.win),500,500);
      gtk_window_set_title (GTK_WINDOW (s.win), "Change devise");
      gtk_window_set_position (GTK_WINDOW (s.win), GTK_WIN_POS_CENTER);
     
      gtk_widget_realize (s.win);
      g_signal_connect (s.win, "destroy", gtk_main_quit, NULL);
     
     
     
      s.vbox = gtk_vbox_new (TRUE, 6);
      gtk_container_add (GTK_CONTAINER (s.win), s.vbox);
     
     
      s.hbox = gtk_hbutton_box_new ();
      gtk_box_pack_end (GTK_BOX (s.vbox), s.hbox, FALSE, FALSE, 5);
      gtk_hbutton_box_set_layout_default ( GTK_BUTTONBOX_END );
     
     
     
     
      menu(&s);
     appli(&s);
     
     
     
      gtk_widget_show_all (s.win);
      gtk_main ();
      return 0;
    }
    Je n'ais pas mis le menu, ni dialogue.c, car le probleme ne vient pas de là.

    Merci

    A +

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Bonjour tout le monde

    Voulez que je le mêtte en zip?

    Car je n'ais pas de réponse.

    A+

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par argon
    Bonjour tout le monde

    Voulez que je le mêtte en zip?

    Car je n'ais pas de réponse.

    A+
    Nan c'est bon, ca m'était complètement sorti d'la tête .. tellement de choses à faire

    Bon pour en revenir à nos moutons ... première erreur détectée:
    (GtkApp:8216): Gtk-WARNING **: Attempting to add a widget with type GtkTable to a GtkWindow, but as a GtkBin subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type GtkVBox
    Fichier: wind.c - Fonction: applic
    Tu essayes de mettre un widget GtkTable directement dans la fenêtre alors qu'elle possède déjà un widget qui est un widget conteneur en plus de cela ! Le message, même s'il est en Anglais est vraiment on ne peut plus explicite donc, au lieu d'un gtk_container_add, fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gtk_box_pack_start (GTK_BOX (s->vbox), s->position, TRUE, TRUE, 0);

    Pour le segfault je regarde de quoi ca peut venir !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Re

    Comment as tu fais pour trouver c'est erreur?

    a+

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par argon
    Re

    Comment as tu fais pour trouver c'est erreur?

    a+
    Bin GTK+ me donnant ce message, j'ai recherché dans le main, j'ai vu que tu mettais qu'un GtkVBox donc j'ai regardé dans ta fonction appli (la fonction menu n'étant pas fournie apparement) et de là j'ai recherché un appel à gtk_container_add et je l'ai modifié tout simplement ... Simple recherche et déduction !

    Mais l'erreur affichée est bien une erreur durant l'exécution ... si tu ne l'as pas eu c'est que sous Windows (je suppose que c'est ton système) la version change un peu à moins que tu n'utilises pas la même version que moi (2.10.6)
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Re

    ok

    j'ai regardé ci c'était pas une erreur d'initialisation.

    Je n'ais pas tres bien compris le tuto que j'ai regardé.

    a+

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ok c'est bon j'ai trouvé ton erreur, elle se trouve à la fin de ta fonction appli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    g_signal_connect(
          G_OBJECT(s->quit),
          "clicked",
          G_CALLBACK(gtk_main_quit),
          NULL
       );
    Tu oublies que tu utilises ici un tableau de pointeur donc il faut fournir également l'indice du tableau en question.

    D'ailleurs en parlant d'indices de tableaux, tu as fait un peu du n'importe quoi car à divers endroits, j'ai pu remarquer que tu utilises des indices qui te font dépasser la taille du tableau soit dans les passages suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s->converse[14] = GTK_WIDGET(gtk_tool_button_new(imgconvertion,"Convertion"));
      gtk_table_attach_defaults(GTK_TABLE(s->position), s->converse[14],0,1,14,15);
    Moi dans la définition de ta structure je vois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget *converse[1];
    Idem pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s->quit[13] =  GTK_WIDGET(gtk_tool_button_new(imgquit,"Quitter"));
    Ton tableau dans ta structure à bien une taille de 13 mais il ne faut pas oublier qu'en C, le comptage commence à 0, non à 1, il faut donc procéder à la règle en vigueure: n-1 pour afficher le dernier indice de tous tableaux !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par argon
    Re

    ok

    j'ai regardé ci c'était pas une erreur d'initialisation.

    Je n'ais pas tres bien compris le tuto que j'ai regardé.

    a+
    Quand on ne comprend pas un truc, le mieux est d'y retourner la tête reposée, on y vois souvent bien plus clair dans une seconde lecture par exemple le lendemain
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. petit soucis avec mon graveur
    Par Vador dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/11/2005, 14h58
  2. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 10h08
  3. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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