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 :

[Tkinter] Interface graphique de QCM


Sujet :

Tkinter Python

  1. #21
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut ouah !
    olala ca c'est vraiment super ! Un vrai cours ! dons je vais essayer d'adapter ce que vous venez de dire a ma situation or je me rends compte que je dois presque tout recommencer du coup...

    Donc je crée ma classe question comme je l'avais fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Question:
                    """Classe définissant une liste de question:
                    -son énoncé
                    -sa réponse 1
                    -sa réponse 2
                    -sa réponse 3
                    -sa réponse juste"""
     
                    def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
    Ca c'etait bon non ?

    c'est donc pour l'autre programme que j'applique vos conseils ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_question = Question("ennonce")
    et ainsi de suite pour les reponses et la réponse juste ?
    Et dedans je mets les listes de questions et des reponses dans de reponses ?

  2. #22
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Citation Envoyé par man0n Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_question = Question("ennonce")
    et ainsi de suite pour les reponses et la réponse juste ?
    Et dedans je mets les listes de questions et des reponses dans de reponses ?
    Non, pas comme ça, je t'ai montré comment faire.

  3. #23
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut r^ponse
    je ne sais pas comment utiliser ce que vous m'avez montré ...

  4. #24
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je ne sais pas comment utiliser ce que vous m'avez montré ...
    Ce que te dit VinsS est parfaitement exact, mais procédons étape par étape, veux-tu ?

    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class Question:
        r"""
            Classe définissant une liste de question:
            -son énoncé
            -sa réponse 1
            -sa réponse 2
            -sa réponse 3
            -sa réponse juste
        """
     
        def __init__ (self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            r"""
                constructeur de la classe
            """
     
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
        # end def
     
    # end class Question
     
    # un exemple simple pour commencer :
     
    une_question = Question(
     
        "Quelle est la couleur du cheval blanc d'Henri IV ?",
        "A. Bleu",
        "B. Blanc",
        "C. Rouge",
        2,
    )
     
    # pour avoir un code CLAIR à relire
    # tu peux aussi mentionner les paramètres de la méthode __init__()
    # de manière EXPLICITE (c'est valable pour toutes les fonctions) :
     
    une_question = Question(
     
        enonce = "Quelle est la couleur du cheval blanc d'Henri IV ?",
        rep1 = "A. Bleu",
        rep2 = "B. Blanc",
        rep3 = "C. Rouge",
        repjuste = 2,
    )
     
    # ça permet de savoir de quoi on parle
     
    # voilà pour l'exemple simple, MAIS...
    Et oui, y a un MAIS.

    Fais attention à tes tabulations dans le code source, Python y est très sensible.

    En général, on utilise 4 espaces blanches ou alors une tabulation équivalente à 4 espaces blanches.

    Tu peux régler ça dans ton éditeur de texte brut ("Préférences > Editeur > ...").

    oui, MAIS :

    Dans cet exemple, nous avons traité UNE SEULE QUESTION à la fois.

    Or, tu voudras sans doute charger plusieurs questions dans ton jeu de QCM.

    Il te faudra donc trouver un objet qui permet de stocker PLUSIEURS questions à la fois.

    Le langage Python a prévu le coup, tu imagines bien.

    En fait, il en existe même plusieurs, mais nous allons nous intéresser au plus simple d'entre eux : la liste séquentielle Python list().

    L'objet "list()" permet de stocker des objets x, y, z de manière séquentielle, c'est-à-dire en respectant l'ordre dans lequel tu insères ces objets.

    Fais l'expérience dans une console Python ou dans un fichier de script Python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # dans Python, on note l'objet "list()" sous la forme de crochets [ ]
    # et les objets doivent être séparés par une virgule
    ma_liste = ["un", "deux", "trois", "quatre"]
    # afficher ma liste
    print(ma_liste)
    # résultat :
    ['un', 'deux', 'trois', 'quatre']
    # l'ordre de la séquence est bien respecté OK
    Maintenant, allons-y franco, on réfléchira ensuite :

    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class Question:
        r"""
            Classe définissant une liste de question:
            -son énoncé
            -sa réponse 1
            -sa réponse 2
            -sa réponse 3
            -sa réponse juste
        """
     
        def __init__ (self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            r"""
                constructeur de la classe
            """
     
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
        # end def
     
    # end class Question
     
    # notre classe existe,
    # on peut maintenant déclarer une liste de questions :
     
    ma_liste = [
     
        # question 1
     
        Question(
            enonce = "Comment ça va ?",
            rep1 = "Bof !",
            rep2 = "Cool",
            rep3 = "La patate !",
            repjuste = 3,
        ),
     
        # question 2
     
        Question(
            enonce = "Combien ça va ?",
            rep1 = "Trop cher !",
            rep2 = "Ça roule",
            rep3 = "Les doigts dans le nez",
            repjuste = 2,
        ),
     
        # question 3
     
        Question(
            enonce = "C'est trop long ?",
            rep1 = "Nooooon !",
            rep2 = "Un peu",
            rep3 = "J'ai la flemme de tout lire !",
            repjuste = 1,
        ),
     
    ] # fin de 'ma_liste' de questions
     
    """
        note ici que la liste est composée d'objets Question()
        on met des parenthèses pour distinguer de la CLASSE Question
        donc ta liste est en réalité composée de :
        ma_liste = [Question(), Question(), Question()]
        si on oublie un instant le détail de chaque objet, évidemment.
    """
    Bon, si on y réfléchit, pour peu que l'on ait 20 ou 30 questions, ça risque de faire très long !

    Comment optimiser tout ça ?

    A toi de proposer une solution, maintenant, on verra ensuite dans quelle direction aller...

  5. #25
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    oui ! la liste est une des rares choses que j'ai vu ! on pourrais par exemple faire une liste de question puis un liste de rep1 de rep2 de rep3 et une de repjuste ainsi on pourra seulement mettre des nombre au lieu d'ecrire toute les phrases ?


    j'ai aussi modifié le programme comme vous me l'avez tout deux expliqué si vous pouvoez jeter un coup d'œil pour voir si c'est bon ?


    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
    # -*- coding: cp1252 -*-
    class Question:
        """Classe définissant une liste de question:
        -son énoncé
        -sa réponse 1
        -sa réponse 2
        -sa réponse 3
        -sa réponse juste"""
     
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):  # Définition des objetss de la classe
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
     
     
     
    n=1 #compteur du nombre de question
     
     
    # -*- coding: cp1252 -*-
    from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
    Fen1=Tk()               #Création de la fênetre, des entrées, etc
    Fen1.title(u"Création question")
     
     
    Af1=Label(Fen1, text= u"Ecrire une question.")
    Af2=Label(Fen1, text="Ecrire la réponse 1.")
    Af3=Label(Fen1, text="Ecrire la réponse 2.")
    Af4=Label(Fen1, text="Ecrire la réponse 3.")
    Af5=Label(Fen1, text="Ecrire la réponse juste.")
    Af6=Label(Fen1, text="")
    Ent1=Entry(Fen1)
    Ent2=Entry(Fen1)
    Ent3=Entry(Fen1)
    Ent4=Entry(Fen1)
    Ent5=Entry(Fen1)
     
    Q1=Question ()   # Pour faciliter l'écriture on renomme la classe
     
    def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
        enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
        rep1=Ent2.get()   
        rep2=Ent3.get()   
        rep3=Ent4.get()   
        repjuste=Ent5.get()    
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":              # On intègre une condition permettant de vérifier si les entrées sont vides.
            Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
            Af6.configure(text= u"Vous n'avez pas rempli toutes les cases")                     # On précise le problème à l'utilisateur.
        else:
            Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
            Af6.configure(text= u"")
     
     
    questions = [] #on crée une liste
     
    def ma_commande2():
        q=Question(Ent1.get(), Ent2.get(), Ent3.get(), Ent4.get(), Ent5.get()
        questions.append(q)
     
        Ent1.delete(0,END)
        Ent2.delete(0,END)
        Ent3.delete(0,END)
        Ent4.delete(0,END)
        Ent5.delete(0,END)
     
        q=questions[k]
     
        Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
        Af2.configure(text= u"Ecrire la réponse 1, de la question "+ str(n)+'.')
        Af3.configure(text= u"Ecrire la réponse 2, de la question "+ str(n)+'.')
        Af4.configure(text= u"Ecrire la réponse 3, de la question "+ str(n)+'.')
        Af5.configure(text= u"Ecrire la réponse juste, de la question "+ str(n)+'.')
        Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
     
    Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)                     # Création des boutons
    Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
     
     
    Af1.pack()              # Affichage
    Ent1.pack()
    Af2.pack()
    Ent2.pack()
    Af3.pack()
    Ent3.pack()
    Af4.pack()
    Ent4.pack()
    Af5.pack()
    Ent5.pack()
    Af6.pack()
    Bout1.pack()
    Bout2.pack_forget()
     
    Fen1.mainloop()
     
    # -*- coding: cp1252 -*-
    from Tkinter import*
    Fen1=Tk()
    Fen1.title(u"Projet Final" )
     
     
    Af1=Label(Fen1, text= u"Bonjour, vous allez maintenant pouvoir commencer le jeu de Manon et Zoémie. Etes-vous prêt ?" )          #Présentation
    Af2=Label(Fen1, text="" )                #Enoncé
    Af3=Label(Fen1, text="" )                #Rép1
    Af4=Label(Fen1, text="" )                #Rép2
    Af5=Label(Fen1, text="" )                #Rép3
    Af6=Label(Fen1, text="Quelle est votre réponse ?" )
    Af7=Label(Fen1, text="" )        # On l'utilisisera pour dire bonne ou mauvaise réponse.
    Ent1=Entry(Fen1)            #Le joueur y rentrera sa réponse
     
    n=0             #Compteur du nombre de click sur le bout1
    k=1             #Compteur des questions
    def ma_commande1():
        global n
        global k
        n=n+1           # Le compteur de click augmentera à chaque click, ou à chaque fois que la commande est éxecutée !
        if n==1:        # APrès le premier click :
            Af1.configure ( text=u"Veuillez répondre en entrant la lettre correspondant à votre choix." )
            Bout1.configure(text=u"Ok" )
        elif n==2:          # Après le deuxième click le jeu commence.
            Af1.pack_forget()               #L'affichage 1 ne sera plus utile.
            Af2.pack()                  # On affiche l'énoncé des questions.
            Af3.pack()
            Af4.pack()
            Af5.pack()
            Af6.pack()
            Ent1.pack()                 # On affiche l'endroit où le joueur rentrera sa réponse
            Bout1.configure(text=u"Valider ma réponse." )        # Le bouton 1 vérifiera dorénavant la justesse de la réponse
            Af2.configure ( text=u"Question"+str(k)+            
                            str(k))
            Af3.configure ( text=u"Réponse A :"+
                            str(k))
            Af4.configure ( text=u"Réponse B :"+
                            str(k))
            Af5.configure ( text=u"Réponse C :"+
                            str(k))
        else:               # A chaque fois que le joueur clickera sur le bouton 1, la réponse du joueur sera vérifiée.
            repjoueur=Ent1.get()        #On enregistre la réponse sous un autre nom qui nous permettra de meux la reconnaitre.
            repjoueur= repjoueur.upper()        # Ce que rentre le joueur est mis en majuscule.
            if repjoueur==str(k):
                Af7.pack()
                Af7.configure(text=u"Bonne réponse ! vous pouvez passer la question suivante" )
                Bout2.pack()        # LE bouton permettant de passer à la question suivante apparait.
            else :
                Af7.pack()
                Af7.configure(text=u"Mauvaise réponse ! Vous avez répondu "+repjoueur+u" alors que la bonne réponse était la "+str(k))
                Bout2.pack()
     
    def ma_commande2 ():            # Commande pour paser à la question suivante.
        global k
        k=k+1               #On augmente le compteur de question.
        Ent1.delete(0,END)
        Af2.configure ( text=u"Question %s:  %s" % (k, q.ennonce)# On affiche la question suivante.str(k))
        Af3.configure ( text=u"Réponse A : %s" % q.rep1)
        Af4.configure ( text=u"Réponse B : %s" % q.rep2)
        Af5.configure ( text=u"Réponse C : %s" % q.rep3)
        Bout2.pack_forget()             #Le bouton disparait.
     
     
    Bout1=Button(Fen1,text=u"Oui",command=ma_commande1)
    Bout2=Button(Fen1,text=u"Question Suivante",command=ma_commande2)
     
     
    Af1.pack()
    Af2.pack_forget()
    Af3.pack_forget()
    Af4.pack_forget()
    Af5.pack_forget()
    Af6.pack_forget()
    Ent1.pack_forget()
    Bout1.pack()
    Af7.pack_forget()
    Bout2.pack_forget()
     
    Fen1.mainloop()

  6. #26
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut répponse
    ou alors on peut faire comme ca ?

    questions = [{'enonce':"quel est la couleur du cheval blanc d'henri IV",'rep1':"bleu",'rep2':"blanc",'rep3':"rouge",'repjuste':2}]

  7. #27
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui ! la liste est une des rares choses que j'ai vu ! on pourrais par exemple faire une liste de question puis un liste de rep1 de rep2 de rep3 et une de repjuste ainsi on pourra seulement mettre des nombre au lieu d'ecrire toute les phrases ?


    j'ai aussi modifié le programme comme vous me l'avez tout deux expliqué si vous pouvoez jeter un coup d'œil pour voir si c'est bon ?


    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
    # -*- coding: cp1252 -*-
    class Question:
        """Classe définissant une liste de question:
        -son énoncé
        -sa réponse 1
        -sa réponse 2
        -sa réponse 3
        -sa réponse juste"""
     
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):  # Définition des objetss de la classe
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
     
     
     
    n=1 #compteur du nombre de question
     
     
    # -*- coding: cp1252 -*-
    from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
    Fen1=Tk()               #Création de la fênetre, des entrées, etc
    Fen1.title(u"Création question")
     
     
    Af1=Label(Fen1, text= u"Ecrire une question.")
    Af2=Label(Fen1, text="Ecrire la réponse 1.")
    Af3=Label(Fen1, text="Ecrire la réponse 2.")
    Af4=Label(Fen1, text="Ecrire la réponse 3.")
    Af5=Label(Fen1, text="Ecrire la réponse juste.")
    Af6=Label(Fen1, text="")
    Ent1=Entry(Fen1)
    Ent2=Entry(Fen1)
    Ent3=Entry(Fen1)
    Ent4=Entry(Fen1)
    Ent5=Entry(Fen1)
     
    Q1=Question ()   # Pour faciliter l'écriture on renomme la classe
     
    def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
        enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
        rep1=Ent2.get()   
        rep2=Ent3.get()   
        rep3=Ent4.get()   
        repjuste=Ent5.get()    
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":              # On intègre une condition permettant de vérifier si les entrées sont vides.
            Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
            Af6.configure(text= u"Vous n'avez pas rempli toutes les cases")                     # On précise le problème à l'utilisateur.
        else:
            Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
            Af6.configure(text= u"")
     
     
    questions = [] #on crée une liste
     
    def ma_commande2():
        q=Question(Ent1.get(), Ent2.get(), Ent3.get(), Ent4.get(), Ent5.get()
        questions.append(q)
     
        Ent1.delete(0,END)
        Ent2.delete(0,END)
        Ent3.delete(0,END)
        Ent4.delete(0,END)
        Ent5.delete(0,END)
     
        q=questions[k]
     
        Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
        Af2.configure(text= u"Ecrire la réponse 1, de la question "+ str(n)+'.')
        Af3.configure(text= u"Ecrire la réponse 2, de la question "+ str(n)+'.')
        Af4.configure(text= u"Ecrire la réponse 3, de la question "+ str(n)+'.')
        Af5.configure(text= u"Ecrire la réponse juste, de la question "+ str(n)+'.')
        Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
     
    Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)                     # Création des boutons
    Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
     
     
    Af1.pack()              # Affichage
    Ent1.pack()
    Af2.pack()
    Ent2.pack()
    Af3.pack()
    Ent3.pack()
    Af4.pack()
    Ent4.pack()
    Af5.pack()
    Ent5.pack()
    Af6.pack()
    Bout1.pack()
    Bout2.pack_forget()
     
    Fen1.mainloop()
     
    # -*- coding: cp1252 -*-
    from Tkinter import*
    Fen1=Tk()
    Fen1.title(u"Projet Final" )
     
     
    Af1=Label(Fen1, text= u"Bonjour, vous allez maintenant pouvoir commencer le jeu de Manon et Zoémie. Etes-vous prêt ?" )          #Présentation
    Af2=Label(Fen1, text="" )                #Enoncé
    Af3=Label(Fen1, text="" )                #Rép1
    Af4=Label(Fen1, text="" )                #Rép2
    Af5=Label(Fen1, text="" )                #Rép3
    Af6=Label(Fen1, text="Quelle est votre réponse ?" )
    Af7=Label(Fen1, text="" )        # On l'utilisisera pour dire bonne ou mauvaise réponse.
    Ent1=Entry(Fen1)            #Le joueur y rentrera sa réponse
     
    n=0             #Compteur du nombre de click sur le bout1
    k=1             #Compteur des questions
    def ma_commande1():
        global n
        global k
        n=n+1           # Le compteur de click augmentera à chaque click, ou à chaque fois que la commande est éxecutée !
        if n==1:        # APrès le premier click :
            Af1.configure ( text=u"Veuillez répondre en entrant la lettre correspondant à votre choix." )
            Bout1.configure(text=u"Ok" )
        elif n==2:          # Après le deuxième click le jeu commence.
            Af1.pack_forget()               #L'affichage 1 ne sera plus utile.
            Af2.pack()                  # On affiche l'énoncé des questions.
            Af3.pack()
            Af4.pack()
            Af5.pack()
            Af6.pack()
            Ent1.pack()                 # On affiche l'endroit où le joueur rentrera sa réponse
            Bout1.configure(text=u"Valider ma réponse." )        # Le bouton 1 vérifiera dorénavant la justesse de la réponse
            Af2.configure ( text=u"Question"+str(k)+            
                            str(k))
            Af3.configure ( text=u"Réponse A :"+
                            str(k))
            Af4.configure ( text=u"Réponse B :"+
                            str(k))
            Af5.configure ( text=u"Réponse C :"+
                            str(k))
        else:               # A chaque fois que le joueur clickera sur le bouton 1, la réponse du joueur sera vérifiée.
            repjoueur=Ent1.get()        #On enregistre la réponse sous un autre nom qui nous permettra de meux la reconnaitre.
            repjoueur= repjoueur.upper()        # Ce que rentre le joueur est mis en majuscule.
            if repjoueur==str(k):
                Af7.pack()
                Af7.configure(text=u"Bonne réponse ! vous pouvez passer la question suivante" )
                Bout2.pack()        # LE bouton permettant de passer à la question suivante apparait.
            else :
                Af7.pack()
                Af7.configure(text=u"Mauvaise réponse ! Vous avez répondu "+repjoueur+u" alors que la bonne réponse était la "+str(k))
                Bout2.pack()
     
    def ma_commande2 ():            # Commande pour paser à la question suivante.
        global k
        k=k+1               #On augmente le compteur de question.
        Ent1.delete(0,END)
        Af2.configure ( text=u"Question %s:  %s" % (k, q.ennonce)# On affiche la question suivante.str(k))
        Af3.configure ( text=u"Réponse A : %s" % q.rep1)
        Af4.configure ( text=u"Réponse B : %s" % q.rep2)
        Af5.configure ( text=u"Réponse C : %s" % q.rep3)
        Bout2.pack_forget()             #Le bouton disparait.
     
     
    Bout1=Button(Fen1,text=u"Oui",command=ma_commande1)
    Bout2=Button(Fen1,text=u"Question Suivante",command=ma_commande2)
     
     
    Af1.pack()
    Af2.pack_forget()
    Af3.pack_forget()
    Af4.pack_forget()
    Af5.pack_forget()
    Af6.pack_forget()
    Ent1.pack_forget()
    Bout1.pack()
    Af7.pack_forget()
    Bout2.pack_forget()
     
    Fen1.mainloop()
    Ne te précipite pas, on a tout le temps.

    Essaie de toujours traiter UN SEUL PROBLÈME À LA FOIS.

    Nous avons vu comment créer un paquet "Question" avec la classe "Question".

    Nous avons vu comment créer une liste d'objets "Question()" qui respecte l'ordre séquentiel dans lequel on insère les questions.

    Maintenant, voyons comment nous allons stocker 20 ou 30 questions.

    Oublie un instant le code que tu as écrit et essaie de repenser le problème à partir de ce que nous venons de voir.

    Ne te précipite pas, prends le temps de la réflexion...

    1. je stocke toutes mes questions dans une liste fixe "en dur" dans mon code Python ?
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_liste = [Question(...), Question(...), .......] ?
    2. je préfère saisir mes questions grâce à un formulaire Tkinter puis les stocker dans une liste ?
    Exemple: on verra tout à l'heure si c'est ce que tu veux faire.

    3. je préfère piocher mes questions à partir d'un fichier texte externe à mon programme ?
    Exemple: on verra tout à l'heure si c'est ce que tu veux faire.

    Réfléchis bien, car chaque décision entraîne une écriture de code différente et donc une perte de temps et d'énergie considérable si tu ne fais pas le choix le plus pertinent pour ton projet...

  8. #28
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    oui désolé c'est mon grand défaut je fais trop de trucs en meme temps ...

    Donc je pense que ce qui est mieux c'est de les rentrer par Tkinter mais de les sauvegarder vous ne pensez pas ?

  9. #29
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui désolé c'est mon grand défaut je fais trop de trucs en meme temps ...

    Donc je pense que ce qui est mieux c'est de les rentrer par Tkinter mais de les sauvegarder vous ne pensez pas ?
    Si je te le demande, c'est que justement je ne sais pas ce que tu as prévu dans ton projet ISN ?

    Est-ce que tu t'es engagée à prévoir la possibilité de saisir les questions/réponses via un formulaire dans ton programme ou est-ce que tu as toute liberté de choisir tes solutions ?

    En gros, est-ce que le prof a imposé des contraintes pour ton projet ou pas ?

  10. #30
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    on avait deja fait un projet simple QCM juste avec des listes mais il nous a demandé d'utiliser les classes et de rentrer par Tkinter les questions ce que fais le debut de mon programme... sauf que lui il ne sait pas faire et je suis la a mendier de l'aide parce que je ne comprends rien sur Google...

  11. #31
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    on avait deja fait un projet simple QCM juste avec des listes mais il nous a demandé d'utiliser les classes et de rentrer par Tkinter les questions ce que fais le debut de mon programme... sauf que lui il ne sait pas faire et je suis la a mendier de l'aide parce que je ne comprends rien sur Google...
    A mon avis ton prof fait semblant de ne pas savoir pour te tester.

    Donc, on a bien une contrainte : saisir les questions dans un formulaire.

    Bien, il nous faut nous concentrer sur ce formulaire, maintenant.

    Encore une fois, on va procéder étape par étape.

    Ce qui compte, c'est que tu comprennes bien qu'en programmation, c'est la vision d'ensemble et l'analyse qui comptent bien plus que le code lui-même.

    Le code, c'est souvent le reflet de la personnalité du codeur (ou de la codeuse) : un code brouillon reflète un esprit brouillon, qui ne comprend pas ce qu'il fait.

    A contrario, un code limpide, clair, facile à relire et à corriger reflète un esprit clair et sans équivoque.

    Si tu réussis à rendre ton programme clair et limpide, alors tu as gagné : ta compréhension du sujet sera entièrement maîtrisée.

    Et je compte bien t'y faire parvenir... demain.

    Parce que là, je suis crevé. Dodo !

    A demain pour de nouvelles aventures !

  12. #32
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut réponse
    non vraiment il ne nous a fait aucun il nous dit n'importe quoi !

    j'ai deja fais ca pour rentrer les questions
    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
    class Question:
        """Classe définissant une liste de question:
        -son énoncé
        -sa réponse 1
        -sa réponse 2
        -sa réponse 3
        -sa réponse juste"""
     
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
     
     
     
    n=1 #compteur du nombre de question
     
     
    # -*- coding: cp1252 -*-
    from Tkinter import*
    Fen1=Tk()
    Fen1.title(u"Création question")
     
     
    Af1=Label(Fen1, text= u"Ecrire une question.")
    Af2=Label(Fen1, text="Ecrire la réponse 1.")
    Af3=Label(Fen1, text="Ecrire la réponse 2.")
    Af4=Label(Fen1, text="Ecrire la réponse 3.")
    Af5=Label(Fen1, text="Ecrire la réponse juste.")
    Ent1=Entry(Fen1)
    Ent2=Entry(Fen1)
    Ent3=Entry(Fen1)
    Ent4=Entry(Fen1)
    Ent5=Entry(Fen1)
     
    Q1=Question ()
     
    def ma_commande1():
        enonce=Ent1.get()   
        rep1=Ent2.get()   
        rep2=Ent3.get()   
        rep3=Ent4.get()   
        repjuste=Ent5.get()    
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":
            Bout2.pack_forget ()
        else:
            Bout2.pack ()
     
    def ma_commande2():
        global n
        enonce=Ent1.get()
        Q1.enonce= (enonce)
        Ent1.delete (0,END)    
        rep1=Ent2.get()
        Q1.rep1=(rep1)
        Ent2.delete (0,END)
        rep2=Ent3.get()
        Q1.rep2=(rep2)
        Ent3.delete (0,END)
        rep3=Ent4.get()
        Q1.rep3= (rep3)
        Ent4.delete (0,END)
        repjuste=Ent5.get()
        Q1.repjuste=(repjuste)
        Ent5.delete (0,END)    
        n=n+1
        Af1.configure(text= u"Ecrire une question"+ str(n)+'.')  
        Af2.configure(text= u"Ecrire la réponse 1, de la question"+ str(n)+'.')
        Af3.configure(text= u"Ecrire la réponse 2, de la question"+ str(n)+'.')
        Af4.configure(text= u"Ecrire la réponse 3, de la question"+ str(n)+'.')
        Af5.configure(text= u"Ecrire la réponse juste, de la question"+ str(n)+'.')
        Bout2.pack_forget ()
     
     
    Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)
    Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
     
     
    Af1.pack()
    Ent1.pack()
     
    Af2.pack()
    Ent2.pack()
    Af3.pack()
    Ent3.pack()
    Af4.pack()
    Ent4.pack()
    Af5.pack()
    Ent5.pack()
    Bout1.pack()
    Bout2.pack_forget()
     
    Fen1.mainloop()
    Merci sincèrement pour votre aide !

  13. #33
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Et bien c'est bon comme ça, mais tu dois mettre tes questions dans une liste parce que si tu réutilises toujours Q1 tu n'auras jamais qu'une seule question.

    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    questions = []
     
    def ma_commande2():
        questions.append(Question(Ent1.get(), Ent2.get(), Ent3.get(), 
                                  Ent4.get(), Ent5.get()))

    ma_commande1() peut aussi être simplifiée avec la fonction all()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def ma_commande1():
        if all([Ent1.get(), Ent2.get(), Ent3.get(), Ent4.get(), Ent5.get()]):
            Bout2.pack()
        else:
            Bout2.pack_forget()
    http://docs.python.org/2/library/functions.html#all

  14. #34
    Invité
    Invité(e)
    Par défaut Pas copier/coller, hein !
    Citation Envoyé par man0n Voir le message
    non vraiment il ne nous a fait aucun il nous dit n'importe quoi !

    j'ai deja fais ca pour rentrer les questions
    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
    class Question:
        """Classe définissant une liste de question:
        -son énoncé
        -sa réponse 1
        -sa réponse 2
        -sa réponse 3
        -sa réponse juste"""
     
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            self.enonce = enonce 
            self.rep1 = rep1
            self.rep2= rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
     
     
     
    n=1 #compteur du nombre de question
     
     
    # -*- coding: cp1252 -*-
    from Tkinter import*
    Fen1=Tk()
    Fen1.title(u"Création question")
     
     
    Af1=Label(Fen1, text= u"Ecrire une question.")
    Af2=Label(Fen1, text="Ecrire la réponse 1.")
    Af3=Label(Fen1, text="Ecrire la réponse 2.")
    Af4=Label(Fen1, text="Ecrire la réponse 3.")
    Af5=Label(Fen1, text="Ecrire la réponse juste.")
    Ent1=Entry(Fen1)
    Ent2=Entry(Fen1)
    Ent3=Entry(Fen1)
    Ent4=Entry(Fen1)
    Ent5=Entry(Fen1)
     
    Q1=Question ()
     
    def ma_commande1():
        enonce=Ent1.get()   
        rep1=Ent2.get()   
        rep2=Ent3.get()   
        rep3=Ent4.get()   
        repjuste=Ent5.get()    
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":
            Bout2.pack_forget ()
        else:
            Bout2.pack ()
     
    def ma_commande2():
        global n
        enonce=Ent1.get()
        Q1.enonce= (enonce)
        Ent1.delete (0,END)    
        rep1=Ent2.get()
        Q1.rep1=(rep1)
        Ent2.delete (0,END)
        rep2=Ent3.get()
        Q1.rep2=(rep2)
        Ent3.delete (0,END)
        rep3=Ent4.get()
        Q1.rep3= (rep3)
        Ent4.delete (0,END)
        repjuste=Ent5.get()
        Q1.repjuste=(repjuste)
        Ent5.delete (0,END)    
        n=n+1
        Af1.configure(text= u"Ecrire une question"+ str(n)+'.')  
        Af2.configure(text= u"Ecrire la réponse 1, de la question"+ str(n)+'.')
        Af3.configure(text= u"Ecrire la réponse 2, de la question"+ str(n)+'.')
        Af4.configure(text= u"Ecrire la réponse 3, de la question"+ str(n)+'.')
        Af5.configure(text= u"Ecrire la réponse juste, de la question"+ str(n)+'.')
        Bout2.pack_forget ()
     
     
    Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)
    Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
     
     
    Af1.pack()
    Ent1.pack()
     
    Af2.pack()
    Ent2.pack()
    Af3.pack()
    Ent3.pack()
    Af4.pack()
    Ent4.pack()
    Af5.pack()
    Ent5.pack()
    Bout1.pack()
    Bout2.pack_forget()
     
    Fen1.mainloop()
    Merci sincèrement pour votre aide !
    Salut Manon,

    Allez, je t'ai repris ton code en version SCOLAIRE.

    Attention : c'est pour ta COMPRÉHENSION, pas pour copier/coller dans ton projet ISN, évidemment.

    De toute façon, ton prof s'en rendrait immédiatement compte.

    Inspire-toi de ce qui est mentionné pour réviser/réécrire ce qui ne colle pas dans ton code.

    Note: j'ai écrit ce code sous Linux Ubuntu / Python 2.7+ mais en tenant compte du fait que tu bosses sous MS-Windows (CRLF+CP1252).

    Si tu copies/colles/enregistres ce script dans un fichier test.py JUSTE POUR VOIR ce que ça donne, ça devrait fonctionner OK.

    Sinon, si ça ne fonctionne pas, dis-moi si tu as vu des messages dans la console noire qui apparaît à côté du formulaire, je passerais sous Windows pour vérifier tout ça.

    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
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    #!/usr/bin/env python
    # -*- coding: cp1252 -*-
     
    # conseil :
    # mettre les 'import' en DÉBUT de script
    # aussi souvent que possible.
     
    from Tkinter import *
     
    # très important:
    # pense à toujours privilégier la LISIBILITÉ de ton code.
     
    class Question:
        """
        Classe définissant une question :
            - son énoncé
            - sa réponse 1
            - sa réponse 2
            - sa réponse 3
            - sa réponse juste
        """
     
        def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste=""):
            """
                constructeur de la classe;
                en mettant tous les paramètres en optionnels,
                j'accepte que ma classe soit initialisée à vide,
                e.g.: ma_question = Question()
                puis qu'elle soit valorisée plus tard.
            """
     
            self.enonce = enonce
            self.rep1 = rep1
            self.rep2 = rep2
            self.rep3 = rep3
            self.repjuste = repjuste
     
        # end def --> c'est pratique de "voir" la fin d'un bloc.
     
    # end class Question --> même remarque, se repérer dans le code.
     
    # n'hésite pas à commenter ce que tu fais :
    # ceux qui te reliront comprendront mieux
    # où tu veux en venir.
     
    # l'exemple que je te donne ici est SCOLAIRE :
     
    # tu n'es pas obligée d'en écrire autant, mais
    # dis au moins ce que tu fais quand
    # c'est pas forcément clair.
     
    # n'hésite pas à mettre des noms longs EXPLICITES.
    # le prétexte du nom long chiant à écrire est bidon :
    # tu reliras ton script bien plus souvent que tu ne l'écriras.
     
    # la PEP 8 de Python recommande des noms d'objets
    # ou de variables toujours en *minuscules*
    # la pratique valide ce conseil :
    # cela évite de confondre 'NomsDeClasses' et 'objets'
     
    # je crée ici ma fenêtre principale
    # pour mon formulaire de saisie
    # de question / réponses.
     
    fenetre = Tk()
     
    # je donne un titre à ma fenêtre
     
    fenetre.title(u"Création question")
     
    # je crée les éléments de mon formulaire
     
    # je crée ici un compteur de numéro/nombre de questions
     
    nb_question = 1 # compteur du nombre de questions
     
    # je crée ici la liste qui me servira à stocker les questions
     
    liste_questions = list()
     
    # je crée ici une étiquette qui indiquera le numéro de la question
    # en cours de saisie dans mon formulaire.
    # pour me faciliter la vie, j'ai choisi d'utiliser une variable
    # de contrôle Tkinter du type StringVar()
     
    message_numero_question = StringVar()
     
    # j'initialise le message à afficher dans mon étiquette
     
    message_numero_question.set(
     
        # note: prends l'habitude de FORMATER une chaîne de caractères
        # plutôt que de la concaténer ("abc" + "def") :
        # ton texte sera traduisible dans d'autres langues.
     
        u"Question numéro {}".format(nb_question)
    )
     
    # note: les étiquettes Label() sont placées une fois pour toutes,
    # tu n'as techniquement pas besoin de leur affecter une variable.
     
    # étiquette "Question numéro xxx"
     
    Label(
     
        fenetre,
     
        # on affecte ici notre messager à 'textvariable' au lieu de 'text'
        # comme ça on n'aura plus qu'à modifier le messager le moment venu.
     
        textvariable = message_numero_question,
     
        # ça, c'est du décor pour qu'on voie bien le texte :
     
        bg="red",
     
        fg="white",
     
        font="serif 12 bold italic",
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack(expand=1, fill=X) # pour étaler l'étiquette en largeur
     
    # étiquette "énoncé"
     
    Label(
     
        fenetre,
     
        text=u"Veuillez entrer l'énoncé de votre question :"
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack()
     
    # zone de saisie (entrée) de l'énoncé
     
    entree_enonce = Entry(fenetre)
     
    # je l'affiche immédiatement avec .pack()
     
    entree_enonce.pack()
     
    # étiquette "réponse 1"
     
    Label(
     
        fenetre,
     
        text=u"Réponse numéro 1 :"
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack()
     
    # zone de saisie (entrée) de la réponse 1
     
    entree_reponse1 = Entry(fenetre)
     
    # je l'affiche immédiatement avec .pack()
     
    entree_reponse1.pack()
     
    # étiquette "réponse 2"
     
    Label(
     
        fenetre,
     
        text=u"Réponse numéro 2 :"
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack()
     
    # zone de saisie (entrée) de la réponse 2
     
    entree_reponse2 = Entry(fenetre)
     
    # je l'affiche immédiatement avec .pack()
     
    entree_reponse2.pack()
     
    # étiquette "réponse 3"
     
    Label(
     
        fenetre,
     
        text=u"Réponse numéro 3 :"
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack()
     
    # zone de saisie (entrée) de la réponse 3
     
    entree_reponse3 = Entry(fenetre)
     
    # je l'affiche immédiatement avec .pack()
     
    entree_reponse3.pack()
     
    # étiquette "réponse juste"
     
    Label(
     
        fenetre,
     
        text=u"Veuillez saisir le numéro de la bonne réponse :"
     
    # je l'affiche immédiatement avec .pack()
     
    ).pack()
     
    # zone de saisie (entrée) de la réponse juste
     
    entree_reponse_juste = Entry(fenetre)
     
    # je l'affiche immédiatement avec .pack()
     
    entree_reponse_juste.pack()
     
    # je crée les actions à rattacher à mon formulaire
     
    # note: mets toujours un verbe infinitif correspondant
    # à l'action de ta fonction.
    # 'commande_1', 'commande_2', etc, c'est trop anonyme
    # pour savoir de quoi il en retourne.
     
    def verifier():
        """
            vérification des données du formulaire
        """
        # je récupère les données des zones de saisie (entrées)
     
        enonce = entree_enonce.get()
        rep1 = entree_reponse1.get()
        rep2 = entree_reponse2.get()
        rep3 = entree_reponse3.get()
        repjuste = entree_reponse_juste.get()
     
        # note: tu peux améliorer le code de la condition suivante :
     
        # formulaire incomplet ?
     
        if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":
     
            # masquer le bouton d'enregistrement des données
     
            bouton_enregistrer.pack_forget()
     
        # tout est OK
     
        else:
     
            # montrer le bouton d'enregistrement des données
     
            bouton_enregistrer.pack()
     
        # end if
     
    # end def
     
    # action 'enregistrer'
     
    def enregistrer():
        """
            enregistrement des données du formulaire dans la liste des
            questions.
        """
        # je récupère mon compteur de questions de l'extérieur de ma
        # fonction, d'où la nécessité du 'global'.
     
        global nb_question
     
        # j'ajoute ma nouvelle question à ma liste de questions
     
        liste_questions.append(
     
            Question(
     
                enonce = entree_enonce.get(),
                rep1 = entree_reponse1.get(),
                rep2 = entree_reponse2.get(),
                rep3 = entree_reponse3.get(),
                repjuste = entree_reponse_juste.get(),
            )
        )
     
        # j'efface les zones de saisie (entrées)
        # pour permettre une nouvelle saisie
        # d'une nouvelle question dans mon formulaire
     
        entree_enonce.delete(0, END)
        entree_reponse1.delete(0, END)
        entree_reponse2.delete(0, END)
        entree_reponse3.delete(0, END)
        entree_reponse_juste.delete(0, END)
     
        # je passe à la question suivante
        # en incrémentant mon compteur de questions
     
        nb_question = nb_question + 1
     
        # note: tu peux utiliser la notation abrégée
     
        # nb_question += 1
     
        # si tu préfères,
     
        # 'x += 1' ça revient au même que 'x = x + 1'
     
        # j'en profite pour mettre à jour l'affichage
        # de mon messager
     
        message_numero_question.set(
     
            u"Question numéro {}".format(nb_question)
        )
     
        # je masque mon bouton d'enregistrement
     
        bouton_enregistrer.pack_forget()
     
    # end def
     
    # maintenant que j'ai mes actions, je peux les rattacher
    # à des boutons de formulaire.
     
    # je crée mes boutons de formulaire
     
    # bouton 'Vérifier'
     
    bouton_verifier = Button(
     
        fenetre,
     
        text=u"Vérifier",
     
        command=verifier,
    )
     
    # je l'affiche immédiatement avec .pack()
     
    bouton_verifier.pack()
     
    # bouton 'Enregistrer'
     
    bouton_enregistrer = Button(
     
        fenetre,
     
        text=u"Enregistrer ma question",
     
        command=enregistrer,
    )
     
    # ATTENTION: je N'AFFICHE PAS ce bouton dès le départ !
     
    # /!\ NON---bouton_enregistrer.pack()---NON /!\
     
    # c'est bon, la procédure de formulaire de saisie est complète.
     
    # on lance la boucle programme de Tkinter
    # pour afficher le formulaire et exécuter les actions
    # qui lui sont rattachées.
     
    fenetre.mainloop()
     
    # fin provisoire de mon programme
    # tout s'est déroulé OK.
     
    exit(0) # 0 signifie que tout est OK
     
    # that's all, folks!
    Amuse-toi bien !

  15. #35
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut r^éponse
    Ok tes bien j'ai tout compris normalement alors je tente de modifier mon programme en fonction de ce que vous venez de me dire. Seulement n'y a til pas une moyenne plus court pour rentrer les questions et les reponses ou dois je refaire la meme manip' a chaque fois ??

  16. #36
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Ok tes bien j'ai tout compris normalement alors je tente de modifier mon programme en fonction de ce que vous venez de me dire. Seulement n'y a til pas une moyenne plus court pour rentrer les questions et les reponses ou dois je refaire la meme manip' a chaque fois ??
    Y a toujours des solutions plus mieux mieux.

    Après, il faut voir les contraintes imposées par ton prof.

    Mais théoriquement, tu as suffisamment d'éléments à présent pour pouvoir voler de tes propres ailes.

    Essaie maintenant de replonger dans ton code SEULE et vois ce que toi tu peux apporter de nouveau.

    Moi, perso, avec le recul des années d'expérience, je ne peux que dire que de là à la perfection, il y a encore un sacré bout de chemin à faire.

    A toi de jouer, manon !

  17. #37
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut merci
    Je suis en train de refaire tout mon programme d'apres vos conseils ca prend du temps mais je vais finir par arriver a quelque chose de mieux (loin de la perfection certes) je le mettrai sur le forum pour que vous regardiez si vous le voulez bien !

  18. #38
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Je suis en train de refaire tout mon programme d'apres vos conseils ca prend du temps mais je vais finir par arriver a quelque chose de mieux (loin de la perfection certes) je le mettrai sur le forum pour que vous regardiez si vous le voulez bien !
    Ca marche. Bon boulot.

  19. #39
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut derniere qiestion
    J'ai quasiment fini la premiere partie grave a vos indications ce n'etait pas si difficile seulement je me demandais si il etait possible de bloquer la fenetre enregistrement des question au bout de 20 pour pas que ca continu a l'infini ?

  20. #40
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut camarchepas !
    Il me dit que stringVar() is not definied

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 9 PremièrePremière 123456 ... DernièreDernière

Discussions similaires

  1. Problème avec mon interface graphique Tkinter
    Par SamirIV dans le forum Tkinter
    Réponses: 0
    Dernier message: 09/05/2014, 21h08
  2. Réponses: 4
    Dernier message: 02/05/2014, 20h23
  3. Interface graphique avec python et tkinter
    Par MrTGR57 dans le forum Tkinter
    Réponses: 0
    Dernier message: 23/04/2014, 17h10
  4. Tkinter interface graphique Toplevel
    Par beber74 dans le forum Tkinter
    Réponses: 3
    Dernier message: 13/04/2013, 10h28
  5. plugin interface graphique
    Par jocelyn dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/08/2003, 09h49

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