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 :

Interface Graphique av GTK+


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut Interface Graphique av GTK+
    Salut a tous et a toutes

    J'ai besoin d'un ptit coup de main car j'ai dans le cadre d'un stage de fin d'etude une interface graphique a faire. N'ayant jamais utilisé d'outil pour cela je me suis tourner sur GTK+ (Cela fait 3 jours). Le probleme dans mon programme et que l'interface j'ai pu l'a faire sans pb, par contre pour recuperer les data entrer par l'utilisateur j'ai des soucis. je compile sans pb, mon fenetre apparait bien, mais par ex ds le cas d'une GtkEntry je souhaite recuperer la donné apres avoir appuyer sur la touche entree pour ensuite l'afficher grace a un printf sur la console mais c ici le soucis, jobtient le message d'erreur :
    <prise en main GTK;exe:3756>: gtk-CRITICAL **: gtk_entry_get_text: assertion 'GTK_IS_ENTRY<entry>' failed <null>

    Je pense que ca viens de la fonction g_signal_connect(G_OBJECT(Entry1),"activate",G_CALLBACK(copy),NULL); car comme parametre a la fin j'ai mis un null car je ne sais pas koi mettre

    Je vs remerci d'avance pr vos solutions

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    #include<stdio.h>
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
    /*********************** Fonction recuperation des data ***********************/
     
    #include<stdio.h>
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
     
     
    void copy(GtkWidget *Widget, gpointer *Data)
     {
     const gchar *temp;
     gint Resultat;
     
     // recupere la chaine contenu dans l'entree
      temp = gtk_entry_get_text(GTK_ENTRY(Data));
      printf("%s",temp);
     //g_printf("%s\n", temp);
     
     //met une chaine dans l'entree
      //gtk_entry_set_text(GTK_ENTRY(Data), " le resultat dans la console");
     
    } 
    /******************************************************************************/
     
     
     
     
     
    int main(int argc,char **argv)
    {
     
    ///////////////////////////////////////////////////////////////////////////////
    //////////////////////////////  INTERFACE  ////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////  
     
     
     
    // DECLARATION DES WIDGETS
     
        GtkWidget *Fenetre;
        GtkWidget *Table ;
        GtkWidget *Label1, *Label2, *Label3, *Label4, *Label5, *Label6, *Label7  ;
        GtkWidget *Bouton;
        GtkWidget *Combo;
        GtkWidget *Entry1, *Entry2, *Entry3, *Entry4;
        GtkWidget *Spin1, *Spin2;
        GtkWidget *Image;
        GtkWidget *Frame1, *Frame2, *Frame3;
        GList *list = NULL;
        GList *list1 = NULL;
        gint i;
     
     
     
     
    // INITIALISATION DE GTK
     
        gtk_init(&argc, &argv);
     
     
    // CREATION ET PARAMETRAGE DE LA FENETRE PRINCIPALE
     
        Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(Fenetre), "Recepteur chaine MIMO"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(Fenetre), 350, 300); // Taille de la fenêtre
        gtk_container_set_border_width(GTK_CONTAINER(Fenetre),5); // Espace sur les bords de la fenetre
        gtk_window_set_position(GTK_WINDOW(Fenetre),GTK_WIN_POS_CENTER); // Fenêtre centrée à l'écran   
        //g_signal_connect(G_OBJECT(Fenetre),"destroy",G_CALLBACK(gtk_main_quit), NULL);
     
     
    // CREATION TABLE
     
       Table= gtk_table_new(10,10,FALSE); // Cree une table de 8 lignes et 8 colonnes
       gtk_container_add(GTK_CONTAINER(Fenetre),Table); // On place la table dans la fenetre
     
     
    // REMPLISSAGE DE LA TABLE
     
                   /*Creation des Labels et des Frames*/
     
      Frame1=gtk_frame_new("                            "); // Ajouts des contours  
      Label1=gtk_label_new(" <b>PARAMETRES                                </b> ");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label1, 0, 1, 0, 1 ); 
      gtk_label_set_use_markup(GTK_LABEL(Label1), TRUE); // On dit que l'on utilise les balises pango
      gtk_table_attach_defaults(GTK_TABLE(Table), Frame1, 0,15, 0, 5 ); // On place la widget sur la table
     
      Label2=gtk_label_new(" Frequence(Ghz) : ");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label2, 0, 1, 1, 2 ); 
     
      Label3=gtk_label_new(" Frequence carte d'acquisition(Mhz) : ");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label3, 0, 3, 2, 3 ); 
     
      Label4=gtk_label_new(" Nombre de voies : ");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label4, 0, 2, 3, 4 ); 
     
      Label5=gtk_label_new(" Attenuation(dB) : ");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label5, 0, 2, 4, 5 ); 
     
      Frame2=gtk_frame_new("                   ");
      Label6=gtk_label_new("<b>MESURES                                       </b>");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label6, 0, 1, 6, 7 );
      gtk_label_set_use_markup(GTK_LABEL(Label6), TRUE); 
      gtk_table_attach_defaults(GTK_TABLE(Table), Frame2, 0,15, 6, 8 );
     
      Frame3=gtk_frame_new("                 ");
      Label7=gtk_label_new("<b>MODES                                         </b>");
      gtk_table_attach_defaults(GTK_TABLE(Table), Label7, 0, 1, 9, 10 );
      gtk_label_set_use_markup(GTK_LABEL(Label7), TRUE); 
      gtk_table_attach_defaults(GTK_TABLE(Table), Frame3, 0,15, 8, 11 );
     
     
                    /*Creation des listes déroulantes*/ 
     
      list = g_list_append(list, g_strdup_printf("Analyseur de Spectre\n")); // ajoute une chaine a le liste              
      list = g_list_append(list, g_strdup_printf("Mesure de champs\n"));  
     
      list1 = g_list_append(list1, g_strdup_printf("Affichage\n"));               
      list1 = g_list_append(list1, g_strdup_printf("Sauvegarde\n"));  
     
      Combo = gtk_combo_new(); // cree une liste deroulante
      gtk_combo_set_popdown_strings( GTK_COMBO(Combo), list) ; // met la liste dans la conbo box
      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), ""); // definit le texte de la conbo box
      gtk_table_attach_defaults(GTK_TABLE(Table), Combo, 0, 2, 7, 8 ); 
      gtk_widget_show(Combo); 
     
      Combo = gtk_combo_new(); 
      gtk_combo_set_popdown_strings( GTK_COMBO(Combo), list1) ; 
      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), ""); 
      gtk_table_attach_defaults(GTK_TABLE(Table), Combo, 0, 2, 10, 11 ); 
      gtk_widget_show(Combo);
     
     
                  /* Creation du bouton valider */
     
      Bouton = gtk_button_new_with_label("Valider");
      gtk_table_attach_defaults(GTK_TABLE(Table),Bouton,6,10,11,12);
      gtk_widget_show(Bouton);
     
     
                 /* Creation des cases saisies de data */
     
      Entry1 = gtk_entry_new(); // On cree un champ de saisie de texte
      void copy(GtkWidget *Fenetre, gpointer *Entry1);
     
      Entry2 = gtk_entry_new();
      //void copy(GtkWidget *Fenetre, gpointer *Entry2);
     
      gtk_table_attach_defaults(GTK_TABLE(Table), Entry1, 5, 10, 1, 2 ); 
      gtk_table_attach_defaults(GTK_TABLE(Table), Entry2, 5, 10, 2, 3 );
      //gtk_table_attach_defaults(GTK_TABLE(Table), Entry3, 5, 15, 3, 4 ); 
      //gtk_table_attach_defaults(GTK_TABLE(Table), Entry4, 5, 15, 4, 5 );
     
     
                 /* Creation des Spin */
     
      Spin1=gtk_spin_button_new_with_range(0,4,1);
      gtk_table_attach_defaults(GTK_TABLE(Table), Spin1, 3, 4, 3, 4 ); 
      Spin2=gtk_spin_button_new_with_range(0,50,1);
      gtk_table_attach_defaults(GTK_TABLE(Table), Spin2, 3, 4, 4, 5 );
     
     
                /* Activation saisie en tapant sur entrée */
     
      g_signal_connect(G_OBJECT(Entry1),"activate",G_CALLBACK(copy),NULL);
      g_signal_connect(G_OBJECT(Entry2),"activate",G_CALLBACK(copy),NULL);
     
     
                /* Chargement d'une image à partir d'un fichier*/
     
     /* Image=gtk_image_new_from_file("C:\Travail\\in.png ");           
      gtk_table_attach_defaults(GTK_TABLE(Table), Image, 5, 10, 0, 1 ); */
     
     
     
    // CONSTRUCTION DE LA FENETRE
     
        //gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'
        gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient
     
        gtk_main(); //Rend la main a l'application
     
        return EXIT_SUCCESS;
    }

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par insa59
    Je pense que ca viens de la fonction g_signal_connect(G_OBJECT(Entry1),"activate",G_CALLBACK(copy),NULL); car comme parametre a la fin j'ai mis un null car je ne sais pas koi mettre
    Tu mets ce que tu veux, c'est la valeur que tu récupère par le paramètre Data de la fonction callback (au passage, gpointer est déjà un pointeur, pas besoin de rajouter une indirection). Mais tu peux très bien utiliser le premier paramètre qui correspond au widget qui a reçu le signal.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Je comprends bien mais pkoi alors je n'obtiens rien sur la console.
    Car mon but est bien de recuperer les data.??

  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
    Je n'est pas regardé le code en détail mais qu'est-ce que ceci fout dans ton main ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void copy(GtkWidget *Fenetre, gpointer *Entry1);
    Qu'est-ce que tu espère faire ainsi ? Ca n'a pas le moindre sens !
    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
    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
    La vraie signature du signal activate d'un GtkEntry est de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void        user_function                  (GtkEntry *entry,
                                                gpointer  user_data)
    Et il faut bien entendu respecter les signatures de chaque callback sinon le programme risque d'échouer dans l'appel des tes callback !

    Ensuite, si tu enregistre un callback avec g_signal_connect, dans ton callback, le premier paramètre équivaut au widget qui à intercepté le signal donc dans ton cas, ton GtkEntry ce qui fait que tu peux directement utiliser cet argument dans ta fonction callback donc inutile de passer par l'argument user_data !

    Ton callback sera donc comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void copy(GtkEntry * widget, gpointer * data)
    {
       const gchar *temp = NULL;
     
       // recupere la chaine contenu dans l'entree
       temp = gtk_entry_get_text(widget);
       printf("%s\n",temp);
    }
    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 !

  6. #6
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    oui oui c'est vrai j'ai les enlever ensuite, en faite je viens d'effacer ma mauvaise ligne et j'ai remplacer par la fonction g_signal_connect en remplacant le parametre NULL par Entry, le resulat semble plutot correct car j'obtiens bien les data sur la console...
    J'avance petit a petit donc j'aurais surement dautre petite question

    Merci

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Que signifie le NULL ds
    const gchar *temp = NULL; ????

  8. #8
    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 insa59
    Que signifie le NULL ds
    const gchar *temp = NULL; ????
    Oula, tu ne doit pas seulement débuter en GTK+ mais également en C on dirait

    NULL signifie ... bin rien en fait, ca permet d'initialiser un pointeur en le faisant pointer sur ... rien, une adresse non valide si tu veux en quelques sortes

    Il est dans la bonne habitude de toujours initialiser les pointeurs sur NULL s'ils ne sont pas directement initialisé avec une adresse valide.

    A lire: http://emmanuel-delahaye.developpez.....htm#pointeurs

    Il est généralement plus que conseillé de déjà bien connaître son C avant de se lancer dans l'étude d'une bibliothèque telle que GTK+ !
    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 !

  9. #9
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    c vrai je ne suis pa tre bon en C mais il me demande en stage de faire une interface

    En tt cas merci pour les reponses

Discussions similaires

  1. Interface graphique avec GTK+
    Par bacly dans le forum GTK+
    Réponses: 0
    Dernier message: 29/08/2013, 00h56
  2. Réponses: 11
    Dernier message: 30/11/2010, 01h17
  3. Interface graphique Java GTK+ sous Windows
    Par ramzi986 dans le forum Débuter
    Réponses: 1
    Dernier message: 22/06/2010, 19h23
  4. Interface graphique GTK en C sous Linux
    Par jbjweb dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/07/2006, 14h19

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