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

Tkinter Python Discussion :

pb pour recuperer plusieurs valeurs d'entry


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut pb pour recuperer plusieurs valeurs d'entry
    Bonjour ,



    Le but de mon programme et de faire un validiteur de diplôme

    J'ai un problème pour récupérer les notes qu'à saisie l'utilisateur.J'aimerais pouvoir toutes les récupérer.J'arrive à récupérer que la dernière valeur saisie.



    Voici mon programme:


    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
     
     
    from Tkinter import *
    SMaths=[['maths',8],['francais',2],['hg',2],['phisique chimie',5]]
    SSVT=[['maths',5],['francais',2],['hg',2],['phisique chimie',5],['svt',8]]
    L=[['francais',8],['histoire',8]]
     
    # liste contenant les notes de l'utilisateur
    ListeNote=[]
     
    #action a realiser lors du clic sur valider
    def saisieNote():
     
     
        #creation d'un nouveaux formulaire
        from Tkinter import *
        saisieNote=Tk()
        i=0#indice de la liste principale permettant d'acceder au nom
        #valeur selectionner par l'utilisateur dans la liste
     
     
        # pb au niveau du if ou du combo a mettre dans une focntion et l'apeller
     
        if str(combo.get())=="SSVT" :
            Liste=SSVT
        else :
            Liste=SMaths
     
     
        #on parcourt la liste
        for matiere in Liste:
     
            #affichage du nom de la matiere
            info=Label(saisieNote,text= Liste[i][0])
            i=i+1
            #textBox pour que la saisie de l'utilisateur
            saisie = Entry(saisieNote)
            # ajoute a la liste la note saisie
            ListeNote.append(5)# utiliser saisie.get() 5 est une valeur par defaut ici
     
            #fonction grid qui permet de placer les widjet comme si etait dans un tableaux
            info.grid( row =i)
            saisie.grid(row =i,column =1)
        #valider les notes saisie pour afficher les resultats
        btnResultat=Button(saisieNote,text='Resultat',command= afficheResultat)
        btnResultat.grid(row=i+1 ,column=1)
        saisieNote.mainloop()
     
     
    def afficheResultat() :
        resultat=Tk()
        # explication des données qui suive
        demandeSaisie=Label(resultat,text= ' Voici vos notes')
        demandeSaisie.pack()
     
       # pb au niveau du if ou du combo
     
        if str(combo.get())=="SSVT" :
            Liste=SSVT
        else :
            Liste=SMaths
     
            i=0
     
        #on parcourt la liste
        for matiere in Liste:
     
            #affichage du nom de la matiere
            infos=Label(resultat,text= Liste[i][0])
     
            # affichage des notes
            noteSaisie=Label(resultat,text=ListeNote[i] )
            i=i+1
            infos.pack()
            noteSaisie.pack()
     
     
        #calcul du nombre de point obtenu
        calcul=0
        sommeCoeif=0
        i=0
        for calcul in Liste :
            calcul= Liste[i][1]*ListeNote[i]             # accede au coeif de la matiere
            coeif=Liste[i][1]
            sommeCoeif= coeif + sommeCoeif # permet de de conaitre le coeificient total
            i=i+1
     
     
        # calcul de la moyenne
        moyenne= calcul/coeif
     
     
         #affichage de la moyenne
        resul=Label(resultat,text= 'Vote moyenne est de : ')
        obtenu=Label(resultat,text=moyenne)
        obtenu.pack()
        resul.pack()
     
     
     
     
        btnFermer=Button(resultat,text='Fermer',command=resultat.destroy)
        btnFermer.pack()
        resultat.mainloop()
     
     
     
    # definition du widget principale
    fen1=Tk()
     
     
     
    import Pmw
    #demande de choix de la serie concernant le bac dans une liste
     
    serie = ('SMaths ','SSVT ','L ')
    fen1 = Pmw.initialise()
    combo = Pmw.ComboBox(fen1, labelpos = NW,
                        label_text = 'Choisissez la serie :',
                         scrolledlist_items = serie,
                         listheight = 150)
    combo.grid(row =2, columnspan =2, padx =10, pady =10)
    combo.pack()
     
     
     
     
     
     
     
    #action du bouton valider
    btnValider=Button(fen1,text='Valider',command = saisieNote)
    btnValider.pack(side=RIGHT)
     
    #action du bouton fermer
    btnQuitter=Button(fen1,text='Fermer',command=fen1.destroy)
    btnQuitter.pack(side=LEFT)
     
     
    #lancement du receptionneur d'evenement
    fen1.mainloop()

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour pouvoir récupérer les saisies il faut les stoquer les Entry dans une liste.

    d'autre part ton code n'est vraiment pas beau et tu n'utilises pas du tout les avantages de python.

    Voici quelques remarques:
    Tu peux utiliser les dictionnaires, notamment pour tes variables SMaths, SSVT, L.
    évite d'utiliser des variables commençant par une majuscule, il est plutôt d'usage de les utiliser pour les classes.
    Mettre une fonction dans une fonction, je trouve ça étrange, on peut presque toujours faire autrement.
    En python on peut concaténer des string. tu peux faire "12" + "/20", ça t'évites de faire plusieurs Label. Ou mieux encore utiliser les String Formatting.
    Si tu veux plusieurs fenêtre avec tkinter il vaut mieux utiliser TopLevel plutot de d'utiliser plusieurs fenêtres principales.

    Pis aller, je suis motivé, voici un exemple:

    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
     
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
    from Tkinter import *
    import Pmw
     
    smath = {'maths': 8, 'francais': 2,'hg': 2, 'phisique chimie':5}
    ssvt = {'maths': 5,'francais': 2,'hg': 2,'phisique chimie': 5,'svt': 8}
    l = {'francais': 8 , 'histoire': 8}
     
    dictSerie = {'SMaths': smath, 'SSVT': ssvt, 'L': l}
     
    def saisieNote():
        fenSaisieNote = Toplevel(root)
     
        select=combo.get()
        Label(fenSaisieNote, text='Veuillez saisir vos notes obtenu au bac ?').grid(column=1)
     
        dictEntry = {}
        dictMatiere = dictSerie[combo.get()]
        for i, matiere in enumerate(sorted(dictMatiere.keys())):
            Label(fenSaisieNote, text=matiere).grid(row=i+1)
            entry = Entry(fenSaisieNote)
            dictEntry[matiere] = entry
            entry.grid(row=i+1, column=1)
     
        Button(fenSaisieNote,text='Resultat', command=lambda: afficheResultat(dictEntry)).grid(row=i+2 ,column=1)
     
     
    def afficheResultat(dictEntry):
        fenResultat = Toplevel(root)
        # affichage des notes
        Label(fenResultat,text= ' Voici vos notes:').pack()
        dictMatiere = dictSerie[combo.get()]
        total = 0
        sommeCoef = 0
        for matiere, entry in sorted(dictEntry.items()):
            Label(fenResultat, text="%s: %s/20"%(matiere, entry.get())).pack()
            coef = dictMatiere[matiere]
            note = int(entry.get())
            total += note * coef
            sommeCoef += coef
     
        moyenne = total*1.0 / sommeCoef
     
        #affiche la moyenne
        Label(fenResultat, text= 'Vote moyenne est de : %.1f/20'%moyenne).pack()
     
        #affiche la mention
        if moyenne < 10:
            affichage='Refusé'
        elif moyenne < 12:
            affichage='Reçu : sans mention'
        elif moyenne < 14:
            affichage='Reçu : mention assez bien'
        elif moyenne < 16:
            affichage='Reçu : mention bien'
        else:
            affichage='Reçu : mention très bien'
     
        Label(fenResultat, text=affichage).pack()
     
    root = Tk()
     
    #demande de choix de la série concernant le bac dans une liste
    fen1 = Pmw.initialise()
    combo = Pmw.ComboBox(fen1, labelpos = NW,
                        label_text = 'Choisissez la serie :',
                         scrolledlist_items = sorted(dictSerie.keys()),
                         listheight = 70)
    combo.pack()
     
    #action du bouton valider
    Button(fen1,text='Valider',command = saisieNote).pack(side=RIGHT)
    #action du bouton fermer
    Button(fen1,text='Fermer',command=fen1.destroy).pack(side=LEFT)
    root.mainloop()
    On passe de 185 à 76 lignes.
    J'utilise certainement des outils que tu ne connais pas. N'hésite pas à demander des explications, et google est ton ami.
    Je pense que si tu arrives à comprendre ce code tu auras fait de gros progrès.

    Bien sur, l'idéal serai de refaire tout en POO.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup de ta réponse.J'ai étudié le code.

    Il y a juste deux détails sur lesquels je bloque.

    A quoi sert le sorted lorsque l'on parcourt les éléments du dictionnaire?
    Le deuxième : Quel est l'utilité du enumerate?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Le sorted retourne une liste trié. ça permet d'avoir les matière toujours dans le même ordre, car l'ordre retourné par un dictionnaire est plus ou moins aléatoire.

    enumerate retourne l'élément de la liste ainsi que sont index, ça évite d'incrémenter une variable i.
    Les 2 boucles suivante sont identique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    liste = ['a', 'b', 'c']
     
    i = 0
    for li in liste:
        print li, i
        i += 1
     
    for i, li in enumerate(liste):
        print li, i

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    merci problème résolu

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

Discussions similaires

  1. Code pour insérer plusieurs valeurs dans une cellule
    Par azerty1956 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/03/2009, 14h09
  2. recuperer plusieurs valeurs dans une cellule
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2008, 22h40
  3. Réponses: 6
    Dernier message: 29/11/2007, 17h15
  4. Recupere plusieurs valeur d'une page
    Par ponpon17430 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 02/09/2006, 21h11
  5. probleme pour recuperer une valeur
    Par kespy13 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/04/2006, 11h18

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