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+ Discussion :

Impossibilité d'écrire sur gtk_entry


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut Impossibilité d'écrire sur gtk_entry
    Bonjour,

    Je suis nouveau en C et Gtk et j'essaye d'écrire sur un gtk_entry afin de récupérer le texte. J'arrive à afficher le widget mais après je n'arrive pas à écrire...

    Voilà le code,

    Merci par avance.

    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
    if(i == pKey->keyval)
            {
                fillsheet(pApp,chain);
                pApp->pEntry = gtk_entry_new();
                /* Limitation du nombre de caracteres */
                gtk_entry_set_max_length(GTK_ENTRY(pApp->pEntry), 4);
                /* Mode mot de passe */
                gtk_entry_set_visibility(GTK_ENTRY(pApp->pEntry), FALSE);
                /* Modification du caractere affiche */
                gtk_entry_set_invisible_char(GTK_ENTRY(pApp->pEntry), '*');
     
                gtk_table_attach(GTK_TABLE(pApp->pTable), pApp->pEntry,1, 2, 3, 4,GTK_EXPAND , GTK_EXPAND,100,0);
     
                gtk_widget_show_all(pApp->pWindow);
     
                g_signal_connect(G_OBJECT(pApp->pEntry), "activate", G_CALLBACK(checkpass),(gpointer) pApp);
     
                //checkpass(pApp);
     
                break;
            }

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Pour écrire dans l'Entry :
    gtk_entry_set_text(...)

    Pour lire l'Entry :
    gtk_entry_get_text(...)


    -

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    Bonjour,

    Merci pour la réponse, en fait je ne me suis pas très bien expliqué. Lorsque je crée mon Widget Entry je dois être capable d'écrire avec le clavier dans le Entry mais je ne sais pas pourquoi j'appuie sur les touches du clavier mais le Entry ne se remplit pas. J'ai mis gtk_entry_set_text et effectivement il y a du texte qui est créé mais j'aimerais le taper au clavier.

    Voici le code entier.


    Merci beaucoup.


    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
    #include <gdk/gdkkeysyms.h>
    #include <time.h>
     
    struct _MainWindow
    {
        GtkWidget *pWindow;
        GtkWidget *pTable;
        GtkWidget *pEntry;
        GtkWidget *pButton;
        GtkWidget *pLabel;
        GtkWidget *pImage;
        unsigned short identifier;
        char name[20];
        char surname[20];
        unsigned long credit;
        unsigned short pass;
    };
     
    typedef struct _MainWindow MainWindow;
     
    void steps(gpointer data);
    void begin(gpointer data);
    void accounts(GtkWidget *pWidget,GdkEventKey* pKey,gpointer data);
    void fillsheet(gpointer data,char * chain);
    void checkpass(gpointer data);
    void choice(gpointer data);
    void fail(GtkWidget *pWidget,gpointer data);
    gboolean timer(gpointer data);
     
    int main(int argc, char **argv)
    {
        MainWindow * pApp;
     
        pApp = g_malloc(sizeof(MainWindow));
     
        /** Initialize GTK+ */
        gtk_init(&argc,&argv);
     
        steps(pApp);
     
        /** Enter the main loop */
        gtk_main();
     
        g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(gtk_main_quit),NULL);
     
     
        return EXIT_SUCCESS;
     
    }
     
    void steps(gpointer data)
    {
        begin(data);
    }
     
    void begin(gpointer data)
    {
        MainWindow *pApp;
        pApp = (MainWindow*) data;
     
        /** Create the main window */
        pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "The free ATM");
        gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow),600,600);
        gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER);
     
        pApp->pTable = gtk_table_new(4,3,FALSE);
        gtk_container_add(GTK_CONTAINER(pApp->pWindow), GTK_WIDGET(pApp->pTable));
     
        pApp->pLabel = gtk_label_new("Inserez votre carte");
        pApp->pImage = gtk_image_new_from_file("logodef.png");
     
        gtk_table_attach(GTK_TABLE(pApp->pTable), pApp->pLabel,1, 2, 2, 3,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0);
        gtk_table_attach(GTK_TABLE(pApp->pTable), pApp->pImage,1, 2, 1, 2,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0);
     
        g_signal_connect(pApp->pWindow, "key-press-event",G_CALLBACK(accounts), (gpointer) pApp);
     
        gtk_widget_show_all(pApp->pWindow);
     
    }
     
    void accounts(GtkWidget *pWidget,GdkEventKey* pKey,gpointer data)
    {
        MainWindow *pApp;
        pApp = (MainWindow*) data;
     
        /**
         *    F1->F12
         * 65470->65481
         */
     
        unsigned short i=65470;
        unsigned long * t=3;
        char chain[50];
     
        FILE * file;
        file = fopen("accounts.txt","r");
     
        for(i;i<65481 && pApp->pEntry == NULL ;i++)
        {
            fscanf(file,"%[^\n]",chain);
            fgetc(file);
     
            if(i == pKey->keyval)
            {
                fillsheet(pApp,chain);
                pApp->pEntry = gtk_entry_new();
                /* Limitation du nombre de caracteres */
                gtk_entry_set_max_length(GTK_ENTRY(pApp->pEntry), 4);
                /* Mode mot de passe */
                gtk_entry_set_visibility(GTK_ENTRY(pApp->pEntry), FALSE);
                /* Modification du caractere affiche */
                gtk_entry_set_invisible_char(GTK_ENTRY(pApp->pEntry), '*');
     
                gtk_table_attach(GTK_TABLE(pApp->pTable), pApp->pEntry,1, 2, 3, 4,GTK_EXPAND , GTK_EXPAND,100,0);
     
                gtk_widget_show_all(pApp->pWindow);
     
                g_signal_connect(G_OBJECT(pApp->pEntry), "activate", G_CALLBACK(checkpass),(gpointer) pApp);
     
                //checkpass(pApp);
     
                break;
            }
     
        }
     
        fclose(file);
     
        if(i != pKey->keyval && pApp->pEntry == NULL)
            {
                gtk_label_set_text(GTK_LABEL(pApp->pLabel),"Desole, mais votre carte n'est pas valide\nVeuillez retirer votre carte ");
                g_timeout_add(2000,timer,pApp->pLabel);
            }
     
        //passe "ecran suivant"=> set visible and invisible objects selon besoins
     
        /**
         *1.- atrapper mot de passe
         *2.- comparer mot de passe à fiche.pass
         *3.- Si ok passe à la suite (remonte à steps pour passer à choice)
         *4.- Si non...
         */
     
    }

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Peut-on aussi voir la fonction checkpass();?

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Pendant que j'y suis, le prototype de checkpass(); n'est pas bon. Regarde par ici comment il doit être écrit.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    Bonjour,

    Merci beaucoup pour les réponses, j'ai réussi à corriger les erreurs.

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

Discussions similaires

  1. [DOM] [Débutant(e)] écrire sur un fichier XML à partir de java
    Par Samanta dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 05/02/2008, 11h13
  2. lire/écrire sur un port com sans le monopoliser
    Par totofweb dans le forum Windows
    Réponses: 4
    Dernier message: 26/07/2004, 13h23
  3. [OS] Lire et écrire sur disquette
    Par trax44 dans le forum Programmation d'OS
    Réponses: 17
    Dernier message: 22/02/2004, 20h45

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