besoin d'aide sur programme SVP !

besoin d'aide sur programme SVP ! - Python - Programmation

Marsh Posté le 27-02-2014 à 15:38:02    

Bonjour tout le monde !
Alors voila j'ai un projet d'informatique a faire pour le bac car je suis en specialité informatique seulement j'ai quelques petits soucis que mon prof ne peut resoudre c'est pourquoi je suis ici :)
alors je souhaite faire un QCM avec une interface graphique sur Tkinter. je joinds le programme qui me pose probleme dont le probleme est justement "Q str(k)" que l'on retrouve plusieurs fois tout au long du programme.
Si vous pouvz resoudre ce probleme je pourrai continuer a avanccer sur mon projet merci d'avance ! :)
 
 
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)+            # Affichage des réponses.
                        Q str(k).enonce)                    
        Af3.configure ( text=u"Réponse A :"
                        Q str(k).rep1)
        Af4.configure ( text=u"Réponse B :"
                        Q str(k).rep2)
        Af5.configure ( text=u"Réponse C :"
                        Q str().rep3)
    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=Q str(k).repjuste:      
            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+" alors que la bonne réponse était la "+Q str(k).repjuste+"." )        
            Bout2.pack()            
 
def ma_commande2 ():            # Commande pour paser à la question suivante.
    k=k+1               #On augmente le compteur de question.
    Ent1.delete(0,END)
    Af2.configure ( text=u"Question"+str(k)+            # On affiche la question suivante.
                        Q str(k).enonce)
    Af3.configure ( text=u"Réponse A :"
                        Q str(k).rep1)
    Af4.configure ( text=u"Réponse B :"
                        Q str(k).rep2)
    Af5.configure ( text=u"Réponse C :"
                        Q str(k).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()
 
Merci encore !!!  :hello:

Reply

Marsh Posté le 27-02-2014 à 15:38:02   

Reply

Marsh Posté le 27-02-2014 à 22:24:27    

manolisn a écrit :

Bonjour tout le monde !
Alors voila j'ai un projet d'informatique a faire pour le bac car je suis en specialité informatique seulement j'ai quelques petits soucis que mon prof ne peut resoudre c'est pourquoi je suis ici :)
alors je souhaite faire un QCM avec une interface graphique sur Tkinter. je joinds le programme qui me pose probleme dont le probleme est justement "Q str(k)" que l'on retrouve plusieurs fois tout au long du programme.
Si vous pouvz resoudre ce probleme je pourrai continuer a avanccer sur mon projet merci d'avance ! :)
 
 
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)+            # Affichage des réponses.
                        Q str(k).enonce)                    
        Af3.configure ( text=u"Réponse A :"
                        Q str(k).rep1)
        Af4.configure ( text=u"Réponse B :"
                        Q str(k).rep2)
        Af5.configure ( text=u"Réponse C :"
                        Q str().rep3)
    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=Q str(k).repjuste:      
            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+" alors que la bonne réponse était la "+Q str(k).repjuste+"." )        
            Bout2.pack()            
 
def ma_commande2 ():            # Commande pour paser à la question suivante.
    k=k+1               #On augmente le compteur de question.
    Ent1.delete(0,END)
    Af2.configure ( text=u"Question"+str(k)+            # On affiche la question suivante.
                        Q str(k).enonce)
    Af3.configure ( text=u"Réponse A :"
                        Q str(k).rep1)
    Af4.configure ( text=u"Réponse B :"
                        Q str(k).rep2)
    Af5.configure ( text=u"Réponse C :"
                        Q str(k).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()
 
Merci encore !!!  :hello:


 
Je préviens : j'ai fait du Python il y a longtemps, je n'ai jamais utilisé Tkinter.
J'ai juste fait en sorte que le programme marche sans chercher à comprendre ce qu'il doit faire :
 

Code :
  1. from Tkinter import*
  2. Fen1=Tk()
  3. Fen1.title(u"Projet Final" )
  4. Af1=Label(Fen1, text= u"Bonjour, vous allez maintenant pouvoir commencer le jeu de Manon et Zoémie. Etes-vous prêt ?" )          #Présentation
  5. Af2=Label(Fen1, text="" )                #Enoncé
  6. Af3=Label(Fen1, text="" )                #Rép1
  7. Af4=Label(Fen1, text="" )                #Rép2
  8. Af5=Label(Fen1, text="" )                #Rép3
  9. Af6=Label(Fen1, text="Quelle est votre réponse ?" )
  10. Af7=Label(Fen1, text="" )        # On l'utilisisera pour dire bonne ou mauvaise réponse.
  11. Ent1=Entry(Fen1)            #Le joueur y rentrera sa réponse
  12. n=0             #Compteur du nombre de click sur le bout1
  13. k=1             #Compteur des questions
  14. def ma_commande1():
  15.     global n
  16.     global k
  17.     n=n+1           # Le compteur de click augmentera à chaque click, ou à chaque fois que la commande est éxecutée !
  18.     if n==1:        # APrès le premier click :
  19.         Af1.configure ( text=u"Veuillez répondre en entrant la lettre correspondant à votre choix." )
  20.         Bout1.configure(text=u"Ok" )
  21.     elif n==2:          # Après le deuxième click le jeu commence.
  22.         Af1.pack_forget()               #L'affichage 1 ne sera plus utile.
  23.         Af2.pack()                  # On affiche l'énoncé des questions.
  24.         Af3.pack()
  25.         Af4.pack()
  26.         Af5.pack()
  27.         Af6.pack()
  28.         Ent1.pack()                 # On affiche l'endroit où le joueur rentrera sa réponse
  29.         Bout1.configure(text=u"Valider ma réponse." )        # Le bouton 1 vérifiera dorénavant la justesse de la réponse
  30.         Af2.configure ( text=u"Question"+str(k)+            # Affichage des réponses.
  31.                         str(k))
  32.         Af3.configure ( text=u"Réponse A :"+
  33.                         str(k))
  34.         Af4.configure ( text=u"Réponse B :"+
  35.                         str(k))
  36.         Af5.configure ( text=u"Réponse C :"+
  37.                         str(k))
  38.     else:               # A chaque fois que le joueur clickera sur le bouton 1, la réponse du joueur sera vérifiée.
  39.         repjoueur=Ent1.get()        #On enregistre la réponse sous un autre nom qui nous permettra de meux la reconnaitre.
  40.         repjoueur= repjoueur.upper()        # Ce que rentre le joueur est mis en majuscule.
  41.         if repjoueur==str(k):
  42.             Af7.pack()
  43.             Af7.configure(text=u"Bonne réponse ! vous pouvez passer la question suivante" )
  44.             Bout2.pack()        # LE bouton permettant de passer à la question suivante apparait.
  45.         else :
  46.             Af7.pack()
  47.             Af7.configure(text=u"Mauvaise réponse ! Vous avez répondu "+repjoueur+u" alors que la bonne réponse était la "+str(k))
  48.             Bout2.pack()
  49. def ma_commande2 ():            # Commande pour paser à la question suivante.
  50.     global k
  51.     k=k+1               #On augmente le compteur de question.
  52.     Ent1.delete(0,END)
  53.     Af2.configure ( text=u"Question"+str(k)+            # On affiche la question suivante.
  54.                         str(k))
  55.     Af3.configure ( text=u"Réponse A :"+
  56.                         str(k))
  57.     Af4.configure ( text=u"Réponse B :"+
  58.                         str(k))
  59.     Af5.configure ( text=u"Réponse C :"+
  60.                         str(k))
  61.     Bout2.pack_forget()             #Le bouton disparait.
  62. Bout1=Button(Fen1,text=u"Oui",command=ma_commande1)
  63. Bout2=Button(Fen1,text=u"Question Suivante",command=ma_commande2)
  64. Af1.pack()
  65. Af2.pack_forget()
  66. Af3.pack_forget()
  67. Af4.pack_forget()
  68. Af5.pack_forget()
  69. Af6.pack_forget()
  70. Ent1.pack_forget()
  71. Bout1.pack()
  72. Af7.pack_forget()
  73. Bout2.pack_forget()
  74. Fen1.mainloop()

Reply

Marsh Posté le 28-02-2014 à 19:46:20    

Tu l'as copié collé où ce code ?
 
Si il vient de toi, tu dois sans doute savoir d'où vient ce Q, non? En tout cas je n'ai jamais vu  ce type de syntaxe en python...

Reply

Marsh Posté le 01-03-2014 à 18:56:07    

fred1599 oui il vient de moi mais Q est defini dans un autre programme ou est créée la classe question Q

Reply

Marsh Posté le 01-03-2014 à 19:04:51    

honrisse je n'arrive toujours pas a le faire marcher c'est normal ? ou sont les modifications que tu as faite ?

Reply

Marsh Posté le 01-03-2014 à 19:30:44    

manolisn a écrit :

honrisse je n'arrive toujours pas a le faire marcher c'est normal ? ou sont les modifications que tu as faite ?


 
Par marcher je veux dire que le programme s'exécute (mais il ne fait peut être pas ce que vous voulez faire) alors qu'avant il y avait des erreurs.
http://hfr-rehost.dev.syn.fr/self/6c5f012655531cad93d309a64485524e1fd7de31.png

Reply

Marsh Posté le 01-03-2014 à 19:40:27    

moi il me dit que af4 ne marche pas il ne s'execute pas ...

Reply

Marsh Posté le 01-03-2014 à 19:51:17    

c'est bon j'ai reussi a present il faut que je rentre les questions grace a ce programme:  
 

Code :
  1. class Question:
  2.     """Classe définissant une liste de question:
  3.     -son énoncé
  4.     -sa réponse 1
  5.     -sa réponse 2
  6.     -sa réponse 3
  7.     -sa réponse juste"""
  8.     def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste="" ):  # Définition des objetss de la classe
  9.         self.enonce = enonce
  10.         self.rep1 = rep1
  11.         self.rep2= rep2
  12.         self.rep3 = rep3
  13.         self.repjuste = repjuste
  14.    
  15. n=1 #compteur du nombre de question
  16. # -*- coding: cp1252 -*-
  17. from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
  18. Fen1=Tk()               #Création de la fênetre, des entrées, etc
  19. Fen1.title(u"Création question" )
  20. Af1=Label(Fen1, text= u"Ecrire une question." )
  21. Af2=Label(Fen1, text="Ecrire la réponse 1." )
  22. Af3=Label(Fen1, text="Ecrire la réponse 2." )
  23. Af4=Label(Fen1, text="Ecrire la réponse 3." )
  24. Af5=Label(Fen1, text="Ecrire la réponse juste." )
  25. Af6=Label(Fen1, text="" )
  26. Ent1=Entry(Fen1)
  27. Ent2=Entry(Fen1)
  28. Ent3=Entry(Fen1)
  29. Ent4=Entry(Fen1)
  30. Ent5=Entry(Fen1)
  31. Q1=Question ()   # Pour faciliter l'écriture on renomme la classe
  32. def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
  33.     enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  34.     rep1=Ent2.get() 
  35.     rep2=Ent3.get() 
  36.     rep3=Ent4.get() 
  37.     repjuste=Ent5.get()   
  38.     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.
  39.         Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
  40.         Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )                     # On précise le problème à l'utilisateur.
  41.     else:
  42.         Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
  43.         Af6.configure(text= u"" )
  44.    
  45. def ma_commande2():
  46.     global n        # On intègre le compteur de question à la commande
  47.     enonce=Ent1.get()       # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  48.     Q1.enonce= (enonce)         # On enregistre le texte entré dans l'objet correspondant au texte, ici l'objet énoncé, !!!!! dans la classe correspondant à la question. !!!!!!
  49.     Ent1.delete (0,END)             # On supprime le texte contenue dans l'entrée pour pouvoir entrer un nouveau texte
  50.     rep1=Ent2.get()         #De même
  51.     Q1.rep1=(rep1)         
  52.     Ent2.delete (0,END)
  53.     rep2=Ent3.get()         #De même
  54.     Q1.rep2=(rep2) 
  55.     Ent3.delete (0,END)
  56.     rep3=Ent4.get()         #De même
  57.     Q1.rep3= (rep3)
  58.     Ent4.delete (0,END)
  59.     repjuste=Ent5.get()     #De même
  60.     Q1.repjuste=(repjuste)
  61.     Ent5.delete (0,END)   
  62.     n=n+1                   # Le compteur augmente à chaque fois que l'on appuie sur le bouton.
  63.     Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
  64.     Af2.configure(text= u"Ecrire la réponse 1, de la question "+ str(n)+'.')
  65.     Af3.configure(text= u"Ecrire la réponse 2, de la question "+ str(n)+'.')
  66.     Af4.configure(text= u"Ecrire la réponse 3, de la question "+ str(n)+'.')
  67.     Af5.configure(text= u"Ecrire la réponse juste, de la question "+ str(n)+'.')
  68.     Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
  69. Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)                     # Création des boutons
  70. Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
  71. Af1.pack()              # Affichage des différents bidules.
  72. Ent1.pack()
  73. Af2.pack()
  74. Ent2.pack()
  75. Af3.pack()
  76. Ent3.pack()
  77. Af4.pack()
  78. Ent4.pack()
  79. Af5.pack()
  80. Ent5.pack()
  81. Af6.pack()
  82. Bout1.pack()
  83. Bout2.pack_forget()
  84. Fen1.mainloop()

Reply

Marsh Posté le 01-03-2014 à 23:13:23    

manolisn a écrit :

c'est bon j'ai reussi a present il faut que je rentre les questions grace a ce programme:  
 

Code :
  1. class Question:
  2.     """Classe définissant une liste de question:
  3.     -son énoncé
  4.     -sa réponse 1
  5.     -sa réponse 2
  6.     -sa réponse 3
  7.     -sa réponse juste"""
  8.     def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste="" ):  # Définition des objetss de la classe
  9.         self.enonce = enonce
  10.         self.rep1 = rep1
  11.         self.rep2= rep2
  12.         self.rep3 = rep3
  13.         self.repjuste = repjuste
  14.    
  15. n=1 #compteur du nombre de question
  16. # -*- coding: cp1252 -*-
  17. from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
  18. Fen1=Tk()               #Création de la fênetre, des entrées, etc
  19. Fen1.title(u"Création question" )
  20. Af1=Label(Fen1, text= u"Ecrire une question." )
  21. Af2=Label(Fen1, text="Ecrire la réponse 1." )
  22. Af3=Label(Fen1, text="Ecrire la réponse 2." )
  23. Af4=Label(Fen1, text="Ecrire la réponse 3." )
  24. Af5=Label(Fen1, text="Ecrire la réponse juste." )
  25. Af6=Label(Fen1, text="" )
  26. Ent1=Entry(Fen1)
  27. Ent2=Entry(Fen1)
  28. Ent3=Entry(Fen1)
  29. Ent4=Entry(Fen1)
  30. Ent5=Entry(Fen1)
  31. Q1=Question ()   # Pour faciliter l'écriture on renomme la classe
  32. def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
  33.     enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  34.     rep1=Ent2.get() 
  35.     rep2=Ent3.get() 
  36.     rep3=Ent4.get() 
  37.     repjuste=Ent5.get()   
  38.     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.
  39.         Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
  40.         Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )                     # On précise le problème à l'utilisateur.
  41.     else:
  42.         Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
  43.         Af6.configure(text= u"" )
  44.    
  45. def ma_commande2():
  46.     global n        # On intègre le compteur de question à la commande
  47.     enonce=Ent1.get()       # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  48.     Q1.enonce= (enonce)         # On enregistre le texte entré dans l'objet correspondant au texte, ici l'objet énoncé, !!!!! dans la classe correspondant à la question. !!!!!!
  49.     Ent1.delete (0,END)             # On supprime le texte contenue dans l'entrée pour pouvoir entrer un nouveau texte
  50.     rep1=Ent2.get()         #De même
  51.     Q1.rep1=(rep1)         
  52.     Ent2.delete (0,END)
  53.     rep2=Ent3.get()         #De même
  54.     Q1.rep2=(rep2) 
  55.     Ent3.delete (0,END)
  56.     rep3=Ent4.get()         #De même
  57.     Q1.rep3= (rep3)
  58.     Ent4.delete (0,END)
  59.     repjuste=Ent5.get()     #De même
  60.     Q1.repjuste=(repjuste)
  61.     Ent5.delete (0,END)   
  62.     n=n+1                   # Le compteur augmente à chaque fois que l'on appuie sur le bouton.
  63.     Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
  64.     Af2.configure(text= u"Ecrire la réponse 1, de la question "+ str(n)+'.')
  65.     Af3.configure(text= u"Ecrire la réponse 2, de la question "+ str(n)+'.')
  66.     Af4.configure(text= u"Ecrire la réponse 3, de la question "+ str(n)+'.')
  67.     Af5.configure(text= u"Ecrire la réponse juste, de la question "+ str(n)+'.')
  68.     Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
  69. Bout1=Button(Fen1,text=u"Vérifie",command=ma_commande1)                     # Création des boutons
  70. Bout2=Button(Fen1,text=u"Enregistre les questions ici !",command=ma_commande2)
  71. Af1.pack()              # Affichage des différents bidules.
  72. Ent1.pack()
  73. Af2.pack()
  74. Ent2.pack()
  75. Af3.pack()
  76. Ent3.pack()
  77. Af4.pack()
  78. Ent4.pack()
  79. Af5.pack()
  80. Ent5.pack()
  81. Af6.pack()
  82. Bout1.pack()
  83. Bout2.pack_forget()
  84. Fen1.mainloop()



 
C'est mieux avec la classe question.
En assemblant les deux parties du programme on peut arriver à quelque chose de potable (ajout d'un bouton pour quitter la fenêtre de saisie, reponse juste=A,B ou C, ajout d'une liste pour sauvegarder les questions, ajout de la partie jeu QCM), peut être que cela peut vous inspirer :

Code :
  1. class Question:
  2.     """Classe définissant une liste de question:
  3.     -son énoncé
  4.     -sa réponse 1
  5.     -sa réponse 2
  6.     -sa réponse 3
  7.     -sa réponse juste"""
  8.     def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste="" ):  # Définition des objetss de la classe
  9.         self.enonce = enonce
  10.         self.rep1 = rep1
  11.         self.rep2= rep2
  12.         self.rep3 = rep3
  13.         self.repjuste = repjuste
  14.     #permet d'afficher avec print
  15.     def __str__(self):
  16.         return "enonce=%s ; rep1=%s ; rep2=%s ; rep3=%s ; repJuste=%s" % (self.enonce, self.rep1, self.rep2, self.rep3, self.repjuste)
  17. n=1 #compteur du nombre de question
  18. # -*- coding: cp1252 -*-
  19. from Tkinter import*            # On importe Tkinter, on utilisera l'iinerface pour faciliter l'enregistrement de question dans un dictionnaire.
  20. ################################################################################
  21. #fenetre de saisie des questions
  22. Fen1=Tk()               #Création de la fênetre, des entrées, etc
  23. Fen1.title(u"Création question" )
  24. Af1=Label(Fen1, text= u"Ecrire une question." )
  25. Af2=Label(Fen1, text="Ecrire la réponse A." )
  26. Af3=Label(Fen1, text="Ecrire la réponse B." )
  27. Af4=Label(Fen1, text="Ecrire la réponse C." )
  28. Af5=Label(Fen1, text="Ecrire la réponse juste (A, B ou C)." )
  29. Af6=Label(Fen1, text="" )
  30. Ent1=Entry(Fen1)
  31. Ent2=Entry(Fen1)
  32. Ent3=Entry(Fen1)
  33. Ent4=Entry(Fen1)
  34. Ent5=Entry(Fen1)
  35. #on stocke les questions dans une liste
  36. listOfQuestions = []
  37. Q1=Question()   # Pour faciliter l'écriture on renomme la classe
  38. def ma_commande1():             # On crée une commande qui à pour but de vérifier si toutes les entrées possèdent un texte.
  39.     enonce=Ent1.get()               # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  40.     rep1=Ent2.get()
  41.     rep2=Ent3.get()
  42.     rep3=Ent4.get()
  43.     repjuste=Ent5.get()
  44.     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.
  45.         Bout2.pack_forget ()                                                            # Ainsi le bouton disparaitra.
  46.         Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )                     # On précise le problème à l'utilisateur.
  47.     else:
  48.         Bout2.pack ()           # Si les entrées possédent un texte le bouton apparaitra.
  49.         Af6.configure(text= u"" )
  50.         Bout3.pack ()
  51. def ma_commande2():
  52.     global n        # On intègre le compteur de question à la commande
  53.     enonce=Ent1.get()       # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  54.     Q1.enonce=enonce         # On enregistre le texte entré dans l'objet correspondant au texte, ici l'objet énoncé, !!!!! dans la classe correspondant à la question. !!!!!!
  55.     Ent1.delete (0,END)             # On supprime le texte contenue dans l'entrée pour pouvoir entrer un nouveau texte
  56.     rep1=Ent2.get()         #De même
  57.     Q1.rep1=rep1
  58.     Ent2.delete (0,END)
  59.     rep2=Ent3.get()         #De même
  60.     Q1.rep2=rep2
  61.     Ent3.delete (0,END)
  62.     rep3=Ent4.get()         #De même
  63.     Q1.rep3= rep3
  64.     Ent4.delete (0,END)
  65.     repjuste=Ent5.get()     #De même
  66.     Q1.repjuste=repjuste
  67.     Ent5.delete (0,END)
  68.     n=n+1                   # Le compteur augmente à chaque fois que l'on appuie sur le bouton.
  69.     Af1.configure(text= u"Ecrire une question "+ str(n)+'.')                         # On met à jour le numéro de la question, de l'énoncé ....
  70.     Af2.configure(text= u"Ecrire la réponse A, de la question "+ str(n)+'.')
  71.     Af3.configure(text= u"Ecrire la réponse B, de la question "+ str(n)+'.')
  72.     Af4.configure(text= u"Ecrire la réponse C, de la question "+ str(n)+'.')
  73.     Af5.configure(text= u"Ecrire la réponse juste (A, B ou C), de la question "+ str(n)+'.')
  74.     Bout2.pack_forget ()        # On fait dispaaitre le bouton pour que l'utilsateur ne puisse l'utiliser.
  75.     Bout3.pack_forget()
  76.     print"current question=", Q1
  77.     Q = Question(Q1.enonce, Q1.rep1, Q1.rep2, Q1.rep3, Q1.repjuste)
  78.     listOfQuestions.append(Q)
  79. def close_window_saisie():
  80.     enonce=Ent1.get()       # On renomme les textes entrés pur faciliter l'utilisation de ceux-ci et meiux les reconnaitre.
  81.     Q1.enonce=enonce         # On enregistre le texte entré dans l'objet correspondant au texte, ici l'objet énoncé, !!!!! dans la classe correspondant à la question. !!!!!!
  82.     rep1=Ent2.get()         #De même
  83.     Q1.rep1=rep1
  84.     rep2=Ent3.get()         #De même
  85.     Q1.rep2=rep2
  86.     rep3=Ent4.get()         #De même
  87.     Q1.rep3= rep3
  88.     repjuste=Ent5.get()     #De même
  89.     Q1.repjuste=repjuste
  90.     print"last question=", Q1
  91.     Q = Question(Q1.enonce, Q1.rep1, Q1.rep2, Q1.rep3, Q1.repjuste)
  92.     listOfQuestions.append(Q)
  93.     Fen1.destroy()
  94. Bout1=Button(Fen1,text=u"Vérifie", command=ma_commande1)                     # Création des boutons
  95. Bout2=Button(Fen1,text=u"Enregistre les questions ici !", command=ma_commande2)
  96. Bout3=Button(Fen1,text=u"Enregistre les questions ici et quitte la saisie !", command=close_window_saisie)
  97. Af1.pack()              # Affichage des différents bidules.
  98. Ent1.pack()
  99. Af2.pack()
  100. Ent2.pack()
  101. Af3.pack()
  102. Ent3.pack()
  103. Af4.pack()
  104. Ent4.pack()
  105. Af5.pack()
  106. Ent5.pack()
  107. Af6.pack()
  108. Bout1.pack()
  109. Bout2.pack_forget()
  110. Bout3.pack_forget()
  111. Fen1.mainloop()
  112. #affiche les questions sauvegardees dans la liste
  113. for index in range(len(listOfQuestions)):
  114.     print listOfQuestions[index]
  115. ################################################################################
  116. if len(listOfQuestions)>0 :
  117.     #partie affichage de la fenetre du jeu
  118.     Fen1=Tk()
  119.     Fen1.title(u"Projet Final" )
  120.     Af1=Label(Fen1, text= u"Bonjour, vous allez maintenant pouvoir commencer le jeu de Manon et Zoémie. Etes-vous prêt ?" )          #Présentation
  121.     Af2=Label(Fen1, text="" )                #Enoncé
  122.     Af3=Label(Fen1, text="" )                #Rép1
  123.     Af4=Label(Fen1, text="" )                #Rép2
  124.     Af5=Label(Fen1, text="" )                #Rép3
  125.     Af6=Label(Fen1, text="Quelle est votre réponse ?" )
  126.     Af7=Label(Fen1, text="" )        # On l'utilisisera pour dire bonne ou mauvaise réponse.
  127.     Ent1=Entry(Fen1)            #Le joueur y rentrera sa réponse
  128.     n=0             #Compteur du nombre de click sur le bout1
  129.     k=1             #Compteur des questions
  130.     def ma_commande12():
  131.         global n
  132.         global k
  133.         #verification que l'index ne sorte pas de la liste
  134.         if k-1<len(listOfQuestions):
  135.             questionCourante = listOfQuestions[k-1]
  136.             n=n+1           # Le compteur de click augmentera à chaque click, ou à chaque fois que la commande est éxecutée !
  137.             if n==1:        # APrès le premier click :
  138.                 Af1.configure ( text=u"Veuillez répondre en entrant la lettre correspondant à votre choix." )
  139.                 Bout1.configure(text=u"Ok" )
  140.             elif n==2:          # Après le deuxième click le jeu commence.
  141.                 Af1.pack_forget()               #L'affichage 1 ne sera plus utile.
  142.                 Af2.pack()                  # On affiche l'énoncé des questions.
  143.                 Af3.pack()
  144.                 Af4.pack()
  145.                 Af5.pack()
  146.                 Af6.pack()
  147.                 Ent1.pack()                 # On affiche l'endroit où le joueur rentrera sa réponse
  148.                 Bout1.configure(text=u"Valider ma réponse." )        # Le bouton 1 vérifiera dorénavant la justesse de la réponse
  149.                 Af2.configure ( text=u"Question "+str(k) + " : "+questionCourante.enonce            # Affichage des réponses.
  150.                                 )
  151.                 Af3.configure ( text=u"Réponse A : "+
  152.                                 questionCourante.rep1)
  153.                 Af4.configure ( text=u"Réponse B : "+
  154.                                 questionCourante.rep2)
  155.                 Af5.configure ( text=u"Réponse C : "+
  156.                                 questionCourante.rep3)
  157.             else:               # A chaque fois que le joueur clickera sur le bouton 1, la réponse du joueur sera vérifiée.
  158.                 repjoueur=Ent1.get()        #On enregistre la réponse sous un autre nom qui nous permettra de meux la reconnaitre.
  159.                 repjoueur = repjoueur.upper()        # Ce que rentre le joueur est mis en majuscule.
  160.                 if repjoueur==questionCourante.repjuste:
  161.                     Af7.pack()
  162.                     Af7.configure(text=u"Bonne réponse ! vous pouvez passer la question suivante" )
  163.                     Bout2.pack()        # LE bouton permettant de passer à la question suivante apparait.
  164.                 else :
  165.                     Af7.pack()
  166.                     Af7.configure(text=u"Mauvaise réponse ! Vous avez répondu "+repjoueur+u" alors que la bonne réponse était la "+questionCourante.repjuste)
  167.                     Bout2.pack()
  168.     def ma_commande22 ():            # Commande pour paser à la question suivante.
  169.         global k
  170.         k=k+1               #On augmente le compteur de question.
  171.         #verification que l'index ne sorte pas de la liste
  172.         if k-1<len(listOfQuestions):
  173.             questionCourante = listOfQuestions[k-1]
  174.             Ent1.delete(0,END)
  175.             Af2.configure ( text=u"Question "+str(k)+            # On affiche la question suivante.
  176.                                 " : " + questionCourante.enonce)
  177.             Af3.configure ( text=u"Réponse A : "
  178.                                  + questionCourante.rep1)
  179.             Af4.configure ( text=u"Réponse B : "
  180.                                  + questionCourante.rep2)
  181.             Af5.configure ( text=u"Réponse C : "
  182.                                  + questionCourante.rep3)
  183.             Bout2.pack_forget()             #Le bouton disparait.
  184.         else:
  185.             #fin des questions on ferme la fenetre
  186.             Fen1.destroy()
  187.     Bout1=Button(Fen1,text=u"Oui",command=ma_commande12)
  188.     Bout2=Button(Fen1,text=u"Question Suivante",command=ma_commande22)
  189.     Af1.pack()
  190.     Af2.pack_forget()
  191.     Af3.pack_forget()
  192.     Af4.pack_forget()
  193.     Af5.pack_forget()
  194.     Af6.pack_forget()
  195.     Ent1.pack_forget()
  196.     Bout1.pack()
  197.     Af7.pack_forget()
  198.     Bout2.pack_forget()
  199.     Fen1.mainloop()


Message édité par honrisse le 01-03-2014 à 23:19:55
Reply

Marsh Posté le 02-03-2014 à 15:36:51    

d'accrod merci il y a des chose intéressantes que j'ai pu rajouter mais j'ai eu une erreur de syntaxe que je ne comprends pas pouvons nous nous concentrer sur la pemiere partie du programme cette fois , :)
 

Code :
  1. # -*- coding: cp1252 -*-
  2. from Tkinter import *
  3. class Question:
  4.     """Classe définissant une question :
  5.         - son énoncé
  6.         - sa réponse 1
  7.         - sa réponse 2
  8.         - sa réponse 3
  9.         - sa réponse juste"""
  10.     def __init__(self, enonce="", rep1="", rep2="", rep3="", repjuste="" ):
  11.         self.enonce = enonce
  12.         self.rep1 = rep1
  13.         self.rep2 = rep2
  14.         self.rep3 = rep3
  15.         self.repjuste = repjuste
  16.     # end def
  17. # end class Question
  18. #permet d'afficher avec print
  19. def __str__(self):
  20.     return "enonce=%s ; rep1=%s ; rep2=%s ; rep3=%s ; repJuste=%s" % (self.enonce, self.rep1, self.rep2, self.rep3, self.repjuste)
  21. # création de la fenetre principale pour l'enregistrement de question/réponses
  22. Fen1 = Tk()
  23. # titre donné à la fenêtre
  24. Fen1.title(u"Création question" )
  25. # création d'un compteur du nombre de questions
  26. nb_question = 1
  27. # création de la liste qui servira à stocker les questions
  28. liste_questions = list()
  29. message_numero_question= stringVar()
  30. # création d'une étiquette qui indiquera le numéro de la question
  31. message_numero_question.set(u"Question numéro {}".format(nb_question))
  32. Label(Fen1,textvariable = message_numero_question,
  33.                           bg="red",
  34.                           fg="white",
  35.                           font="serif 12 bold italic" ).pack(expand=1, fill=X)
  36. #Pour l'énoncé
  37. Af1=Label(Fen1,text=u"Veuillez entrer l'énoncé de votre question :".pack() #affichage immédiat
  38. # zone de saisie de l'énoncé
  39. Ent_enonce = Entry(Fen1)
  40. #affichage immédiat avec .pack()
  41. Ent_enonce.pack()
  42. #Pour les réponses
  43. Af2=Label(Fen1,text=u"Réponse numéro A :" ).pack()
  44. Ent_rep1 = Entry(Fen1)
  45. Ent_rep1.pack()
  46. Af3=Label(Fen1,text=u"Réponse numéro B :" ).pack()
  47. Ent_rep2 = Entry(Fen1)
  48. Ent_rep2.pack()
  49. Af4=Label(Fen1,text=u"Réponse numéro C :" ).pack()
  50. Ent_rep3 = Entry(Fen1)
  51. Ent_rep3.pack()
  52. Af5=Label(Fen1,text=u"Veuillez saisir la lettre de la bonne réponse :" ).pack()
  53. Ent_repjuste = Entry(Fen1)
  54. Ent_repjuste.pack()
  55. # je récupère les données des zones de saisie
  56. def verifier():
  57.     enonce = Ent_enonce.get()
  58.     rep1 = Ent_rep1.get()
  59.     rep2 = Ent_rep2.get()
  60.     rep3 = Ent_rep3.get()
  61.     repjuste = entree_repjuste.get()
  62.     # formulaire incomplet
  63.     if enonce=="" or rep1=="" or rep2=="" or rep3=="" or repjuste=="":
  64.         # masquer le bouton d'enregistrement 
  65.         bouton_enregistrer.pack_forget()
  66.         Af6.configure(text= u"Vous n'avez pas rempli toutes les cases" )
  67.     # tout est rempli:
  68.     else:
  69.         # montrer le bouton d'enregistrement
  70.         bouton_enregistrer.pack()
  71.     # end if
  72. # end def
  73. # Enregistrement des données
  74. def enregistrer():
  75.     global nb_question
  76.     # enregistrement des questions dans la liste.
  77.     liste_questions.append(Question(enonce = Ent_enonce.get(),
  78.                                     rep1 = Ent_rep1.get(),
  79.                                     rep2 = Ent_rep2.get(),
  80.                                     rep3 = Ent_rep3.get(),
  81.                                     repjuste = Ent_repjuste.get()))
  82.     # effacement des zones de saisie
  83.     Ent_enonce.delete(0, END)
  84.     Ent_rep1.delete(0, END)
  85.     Ent_rep2.delete(0, END)
  86.     Ent_rep3.delete(0, END)
  87.     Ent_repjuste.delete(0, END)
  88.     # je passe à la question suivante
  89.     nb_question += 1
  90.     #mise a jour de l'étiquette
  91.     message_numero_question.set(u"Question numéro {}".format(nb_question))
  92.     # masquer le bouton d'enregistrement
  93.     bouton_enregistrer.pack_forget()
  94. # end def
  95. #fermeture de la fenêtre
  96. def fermer():
  97.     enonce = Ent_enonce.get()
  98.     Question.enonce = enonce
  99.     rep1 = Ent_rep1.get()
  100.     Question.rep1 = rep1
  101.     rep2 = Ent_rep2.get()
  102.     Question.rep2 = rep2
  103.     rep3 = Ent_rep3.get()
  104.     Question.rep3 = rep3
  105.     repjuste = Ent_repjuste.get()
  106.     Question.repjuste = repjuste
  107.     print"last question=", Question
  108.     Q = Question(Question.enonce, Question.rep1, Question.rep2, Question.rep3, Question.repjuste)
  109.     liste_Questions.append(Q)
  110.     Fen1.destroy()
  111. #End def
  112.          
  113. # création des boutons
  114. # bouton 'Vérifier'
  115. bouton_verifier = Button(Fen1,text=u"Vérifier",command=verifier,)
  116. bouton_verifier.pack()
  117. # bouton 'Enregistrer'
  118. bouton_enregistrer = Button(Fen1,text=u"Enregistrer ma question",command=enregistrer)
  119. #On ne l'affiche pas immediatement
  120. # bouton 'Fermer'
  121. bouton_fermer = Button(Fen1ntext=u"Fermer la fenêtre",command=fermer)
  122. bouton-fermer.pack()
  123. fenetre.mainloop()
  124. #affiche les questions sauvegardees dans la liste
  125. for index in range(len(liste_question)):
  126.     print liste_questions[index]

Reply

Marsh Posté le 02-03-2014 à 15:36:51   

Reply

Marsh Posté le 02-03-2014 à 17:52:40    

Simple question, comment vas-tu implanter tes questions et réponses ? Par un fichier questions et réponses, ou en brut dans ton code ?

Reply

Marsh Posté le 02-03-2014 à 21:03:09    

via Tkinter

Reply

Marsh Posté le 03-03-2014 à 12:53:36    

Et donc à chaque fois que tu rédémarres le programme, tu dois recréer questions et réponses?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed