Partage
  • Partager sur Facebook
  • Partager sur Twitter

QCM dans une interface

Sujet résolu
    19 mai 2015 à 17:14:26

    Bonjour internautes et visiteurs venus d'ailleurs!

    Je me retrouve confronté à un soucis de logique et également surement à un manque de compétences en python x)

    J'ai réalisé un QCM en python et il m'a pris l'idée de le mettre sur une interface graphique plutôt que cette bien gentille mais un peu moche ligne de commande ^^

    Je me suis donc attaqué a Tkinter et tous ses merveilleux widgets! 

    Je bloque au niveau des 3 Checkbox que j'ai crée pour chaque choix proposé à l'utilisateur. 

    J'aimerai pouvoir faire que mon programme récupère la première lettre du choix (qui est donc en soi la réponse que l'on veut donner), la stock dans la variable "rep" pour faire la comparaison avec la réponse contenu à la fin de la liste.

    J'ai donc essayé de mettre dans la commande de la checkbox, une référence à la fonction créée tout en bas qui permettrait de justement stocker la réponse. Cela ne fonctionne visiblement pas. Je ne comprend pas super bien encore le fonctionnement du "self" et ducoup du "def__init__(self)".

    J'ai également un petit soucis avec ma première fenetre qui ne veut pas se fermer au moment ou je clique sur le bouton que j'ai crée dessus.

    Le code:

    # -*-coding:Latin-1 -*
    
    from tkinter import *
    
    fenetre = Tk()
    
    champ_label= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
    champ_label.pack()
    
    champ_label2= Label(fenetre, text="Quel est votre nom ?")
    champ_label2.pack()
    
    var_texte = StringVar()
    ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
    ligne_texte.pack()
    
    nomJoueur = var_texte.get()
    champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
    champ_label3.pack()
    
    bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.quit)
    bouton_quitter.pack()
    
    
    questions=[["\n1.Quelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
    ["\n2.Quelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\nB.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\nC.Un dossier ne peut contenir que du texte\n", "A"],
    ["\n3.Quelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\nB.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\nC.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
    ["\n4.Trois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\nB. Le modem.\nC. Le Cederom.\n", "B"],
    ["\n5.Un seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\nB. Le scanner.\nC. Le moniteur\n", "C"],
    ["\n6.Qu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\nB. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\nC.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
    ["\n7.Un seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\nB. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\nC.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
    ["\n8.Pour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\nB. J\'appelle mon fichier \"disquette A\".\nC.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
    ["\n9.Quelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\nB. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\nC.Copier le document , puis le coller dans le dossier de son choix\n","B"],
    ["\n10.Que signifie le sigle 'www' ?\n", "A. Waste Work Web.\nB.Wild Wild West.\nC.World Wide Web\n","C"]]
    	
    pointsplus = 0
    pointsmoins = 0
    
    for question in questions:
    	fenetre2 = Tk() 
    	def __init__(self):
    		champ_label4= Label(fenetre2, text=question[0])
    		champ_label4.pack()
    		var_case1 = IntVar()
    		var_case2 = IntVar()
    		var_case3 = IntVar()
    		case1 = Checkbutton(fenetre2, text=question[1], variable=var_case1, command=self.choix)
    		case2 = Checkbutton(fenetre2, text=question[2], variable=var_case2, command=self.choix)
    		case3 = Checkbutton(fenetre2, text=question[3], variable=var_case3, command=self.choix)
    		case1.pack()
    		case2.pack()
    		case3.pack()
    	
        
    	rep=input("Ma réponse")
    	
    	if rep!= question[2]:
    		pointsmoins=pointsmoins+2
    		print("Reponse incorrecte",N,"Question suivante !\n")
    	elif rep== question[2]:
    		pointsplus=pointsplus+2
    		print("Reponse correcte",N,"Question suivante !\n")
    	else:
    		break
    
    #On calcul les points
    
    R = pointsplus - pointsmoins
    print (R)
    
    #On donne les résultats
    niveaux=[["20","Bravo"],
            ["16","Presque excellent"],
            ["12","Peut mieux faire"],
            ["10","C'est limite"],
            ["5","Rate"],
            ["2","Pourquoi as-tu fais ce test?"]]
    		
    for niveau in niveaux: 
        if R >= int(niveau[0]):
            print (R"/20, ",niveau[1]," ")
            break
    
    	
    def choix(self):
    	rep= question[0:1]
    	return rep
    		
    

    Merci d'avance pour le temps que vous pourrez consacrer à mon problème!

    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2015 à 17:52:30

      tu peux remplacer fenetre.quit par fenetre.destroy ça marchera mieux ;)

      n'oublie pas de remetre le fenetre.mainloop()

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2015 à 18:04:12

        Je pense que tu es parti dans quelque chose d'un peut trop compliqué pour la suit ^^

        moi j'utilise __init__ mais pour initialiser des classes. Hors ici tu ne crée pas de classe, je ne vois pas ce que tu veux faire avec. A mon avis, tu as piqué un bout de code dans un tuto sans remarqué qu'il était écrit "pour faire des bouttons dans une classe ...."

        Il vaudrait mieux que tu crées une fenetre avec tes 3 boutons, tes 3 textes et un bouton valider les réponces

        comme ça dans valider tu met à jour tes scores et tu change les questions

        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2015 à 18:29:11

          # -*-coding:Latin-1 -*
           
          from Tkinter import *
           
          fenetre = Tk()
           
          champ_label= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
          champ_label.pack()
           
          champ_label2= Label(fenetre, text="Quel est votre nom ?")
          champ_label2.pack()
           
          var_texte = StringVar()
          ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
          ligne_texte.pack()
           
          nomJoueur = var_texte.get()
          champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
          champ_label3.pack()
           
          bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.destroy)
          bouton_quitter.pack()
          
          fenetre.mainloop()
          questions=[["\n1.Quelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
          ["\n2.Quelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\nB.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\nC.Un dossier ne peut contenir que du texte\n", "A"],
          ["\n3.Quelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\nB.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\nC.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
          ["\n4.Trois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\nB. Le modem.\nC. Le Cederom.\n", "B"],
          ["\n5.Un seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\nB. Le scanner.\nC. Le moniteur\n", "C"],
          ["\n6.Qu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\nB. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\nC.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
          ["\n7.Un seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\nB. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\nC.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
          ["\n8.Pour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\nB. J\'appelle mon fichier \"disquette A\".\nC.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
          ["\n9.Quelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\nB. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\nC.Copier le document , puis le coller dans le dossier de son choix\n","B"],
          ["\n10.Que signifie le sigle 'www' ?\n", "A. Waste Work Web.\nB.Wild Wild West.\nC.World Wide Web\n","C"]]
               
          pointsplus = 0
          pointsmoins = 0
           
          class Demander:
              def __init__(self,question):#Ici  on défini toutes les variables de l'objet
                  self.question = question
                  self.fenetre2 = Tk()
                  self.champ_label4= Label(self.fenetre2, text=question[0])
                  self.champ_label4.pack()
                  self.var_case1 = IntVar()
                  self.var_case2 = IntVar()
                  self.var_case3 = IntVar()
                  self.case1 = Checkbutton(self.fenetre2, text=question[1], variable=self.var_case1)
                  self.case2 = Checkbutton(self.fenetre2, text=question[2], variable=self.var_case2)
                  self.case3 = Checkbutton(self.fenetre2, text=question[3], variable=self.var_case3)
                  self.case1.pack()
                  self.case2.pack()
                  self.case3.pack()
                  self.Bouton = Button(self.fenetre2,text = "Valider",command = self.valider)
                  self.Bouton.pack()
          
              def valider(self):#Ceci est une fonction
                  print(self.var_case1.get(),self.var_case2.get(),self.var_case3.get())
               
          
          D =Demander(questions[0])
          D.fenetre2.mainloop()#On affiche le fenetre de l'objet D


          Voilà, vue que tu as utiliser __init__ je te propose une solution qui s'en sert.

          J'ai créé une classe appelée "Demander" et qui prend en argument

          Ce qui fait que lorsque j'écris D = Demander(questions[0])

          je crée un Objet de la classe "Demander" et qui va s'appeler "D"

          Qu'est ce qu'un objet ? ben google est ton ami ^^

          Plus sérieusement prenons l'exemple des chaises. Ce sont des objets, elles ont la même fonctions mais pas toutes les mêmes variables (certaines sont plus grandes que d'autres, pas la même couleur ...) Ben en info c'est pareil

          D va avoir les même fonctions que tout les objets de classe "Demander" mais pas les même valeurs dans ses variables.

          le "self.x" sert à dire on associe à l'objet une variable qui s'appelle x (tu remarques donc que fenetre2 ainsi que tout tes boutons sont des variables associées à l'objet

          pour les fonctions, on les écrits :

          def fonction(self,argument1,argument2,...):
              bla bla bla .....

          Pourquoi on met un "self" dans les arguments ? Pour que les fonctions puissent accéder aux variables associées à l'objet.

          Par exemple j'ai écrit:

          def valider(self):
              print(self.var_case1.get(),self.var_case2.get(),self.var_case3.get())

          la fonction a accès à self.var_case1 grace au self qui est dans les arguments. Au passage, var_case1 est le no de ta variable, il faut faire var_case1.get() si tu veux savoir ce qu'elle contient (1 si la case est cochée et 0 sinon)

          Dernière info : tu peux modifier les variables d'un objet par la suite. Pour cela tu fais : nom_objet.nom_variable = ...

          C'est ce que je fais avec : D.fenetre2.mainloop() # On applique .mainloop() à notre variable fenetre2 de l'objet D car la pauvre fentêtre à été complettement définie dans la partit __init__ mais on ne l'a pas affichée :'(




          -
          Edité par fauquette 19 mai 2015 à 18:30:20

          • Partager sur Facebook
          • Partager sur Twitter
            19 mai 2015 à 18:31:32

            Voilà, tu n'a plus qu'à modifier la fonction valider pour qu'elle modifie les scores et que si c'est la dernière question elle supprime la fenetre pour afficher celle des résultats
            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2015 à 9:44:36

              WAOW *.*

              Tant d'implication dans ta réponse fauquette! et je t'en remercie grandement! =D

              Quelques petites questions cependant subsistent ^^" 

              Mais je vais regarder un peu, essayer de capter toutes ces nouveautés et je reviendrai si jamais je continue de ramer =)

              • Partager sur Facebook
              • Partager sur Twitter
                20 mai 2015 à 10:45:15

                Voila mon code modifié (sans le début):

                pointsplus = 0
                pointsmoins = 0
                
                class Demander:
                	def __init__(self,question):
                		self.question = question
                		self.fenetre2 = Tk()
                		self.champ_label4= Label(self.fenetre2, text=question[0])
                		self.champ_label4.pack()
                		self.var_case1 = IntVar()
                		self.var_case2 = IntVar()
                		self.var_case3 = IntVar()
                		self.case1 = Checkbutton(self.fenetre2, text=question[1], variable=self.var_case1)
                		self.case2 = Checkbutton(self.fenetre2, text=question[2], variable=self.var_case2)
                		self.case3 = Checkbutton(self.fenetre2, text=question[3], variable=self.var_case3)
                		self.case1.pack()
                		self.case2.pack()
                		self.case3.pack()
                		self.Bouton = Button(self.fenetre2,text = "Valider",command = self.valider)
                		self.Bouton.pack()
                		self.rep = 0
                		
                	def valider(self):
                		if self.var_case1==1:
                			D.rep = question[1][0:1]
                		elif self.var_case2==1:
                			D.rep = question[2][0:1]
                		elif self.var_case3==1:
                			D.rep = question[3][0:1]
                		else:
                			return 0
                			
                	  
                for question in questions:
                	D =Demander(questions[0])
                	
                	D.valider
                	
                	if D.rep!= question[4]:
                		pointsmoins=pointsmoins+2
                		print("Reponse incorrecte",N,"Question suivante !\n")
                	elif D.rep== question[4]:
                		pointsplus=pointsplus+2
                		print("Reponse correcte",N,"Question suivante !\n")
                	else:
                		break
                
                	D.fenetre2.mainloop()
                
                	
                R = pointsplus - pointsmoins
                print (R)
                
                
                niveaux=[["20","Bravo"],
                        ["16","Presque excellent"],
                        ["12","Peut mieux faire"],
                        ["10","C'est limite"],
                        ["5","Rate"],
                        ["2","Pourquoi as-tu fais ce test?"]]
                		
                for niveau in niveaux: 
                    if R >= int(niveau[0]):
                        print (R"/20, ",niveau[1]," ")
                        break
                
                	
                

                Le problème que j'ai maintenant c'est que quand je clique sur valider rien ne se passe.

                Et quand je rentre dans ma fenetre2, sur la console il s'affiche directement "réponse incorrecte" sans même avoir commencé à répondre.

                Je n'arrive pas à comprendre comment faire afficher la question suivante car à chaque fois que je veux quitter la fenêtre je reste sur la même question et il continue de s'afficher "réponse incorrecte" sur la console derrière. 

                Je vois donc que le programme rentre bien dans ma boucle "for" mais apparemment ne veux pas parcourir la liste =(

                J'ai essayé, avec la fonction "valider", de faire le traitement que je voulais faire à la base, récupérer le premier caractère mais je ne suis vraiment pas sur d'avoir fais quelque chose de juste et qui fonctionne même si ça parait totalement logique pour moi x)

                Je connais bien les notions d'objets, de fonctions et classe mais j'avoue ne pas être super à l'aise avec leur concept et leur fonctionnement. Est-ce que le "__init__" est comme un "private:" en C ou C++? 

                Merci encore pour le temps donné! =)

                -
                Edité par Nightfever 20 mai 2015 à 12:03:57

                • Partager sur Facebook
                • Partager sur Twitter
                  20 mai 2015 à 12:26:32

                  "sur la console il s'affiche directement "réponse incorrecte" sans même avoir commencé à répondre"
                  Parce qu'il sait que tu vas répondre faux. Je te taquine :D.
                  Est-ce que ton utilisation des print() est pour du déboggage? Parce que si ce n'est pas le cas, il ne faut pas mélanger l'affichage interface avec l'affichage console. Pour afficher quelque chose sur ton interface, on utilise des label.
                  Ensuite ton programme est beaucoup trop violent. L'utilisation des classes est totalement disproportionnée. Conceptuellement, il te faut quelques Label, 1 Entry, et puis 1 Button question suivante. Ensuite il suffit juste de changer l'intitulé de chaque objet quand tu passe à la question suivante.
                  PS: Un bon point pour ton organisation des questions ;).
                  Voici un exemple que tu pourrais adapter, ou même t'en servir pour résoudre les problèmes de ton propre code. L'interface n'est pas génial, mais le comportement est propre (je pense):
                  #Code simpliste
                  import tkinter as tk
                  from random import choice
                  
                  
                  #Liste des questions:
                  lst_qst = [("Nbre doigt main", "A. 3", "B. 4", "C.5", "C"),
                             ("Couleur cheval blanc", "A. Blanc", "B. Vert", "C. Bleu", "A"),
                             ("Première lettre alphabet", "A. B", "B. C", "C. A", "C")]
                  #Variable qui va conserver la réponse et le décompte des points
                  ctrl = ["", 0]
                  
                  
                  def init():
                      for child in fen.winfo_children():
                          child["state"] = "normal"
                  
                      #Utilisation de la fonction suivant() pour afficher la 1ère question
                      suivant()
                      #Changement de la fonction associée à btn pour la suite et de son texte
                      btn["text"] = "Question suivante"
                      btn["command"] = suivant
                  
                  
                  def suivant():
                      if lst_qst:  #tant qu'il reste des questions
                          lot = choice(lst_qst)
                          lst_qst.remove(lot)
                          qst["text"], chx1["text"], chx2["text"], chx3["text"], ctrl[0] = lot
                  
                          #On désactive la possibilité de passer à la question suivante
                          btn["state"] = "disabled"
                  
                      else:
                          #S'il n'y a plus de question:
                          for child in fen.winfo_children():
                              child["state"] = "disabled"
                  
                          #On réactive le msg et on affiche quelquechose:
                          msg["state"] = "normal"
                          msg["text"] = "Fin de partie. Ton score est de {}".format(ctrl[1])
                  
                          #Le bouton suivant est de nouveau modifier
                          btn["state"] = "normal"
                          btn["text"] = "Quitter"
                          btn["command"] = fen.destroy  #On ne met que le callback (sans les ())
                  
                  
                  def verif(event):
                      if rep.get() == ctrl[0]:
                          msg["text"] = "Bonne réponse  GG"
                          ctrl[1] += 1
                      else:
                          msg["text"] = "Looser ;)"
                  
                      #On réactive le bouton pour passer à la question suivante
                      btn["state"] = "normal"
                  
                  
                  
                  #Initialisation
                  fen = tk.Tk()
                  qst = tk.Label(fen, text="", state="disabled")
                  chx1 = tk.Label(fen, text="", state="disabled")
                  chx2 = tk.Label(fen, text="", state="disabled")
                  chx3 = tk.Label(fen, text="", state="disabled")
                  rep = tk.Entry(fen, state="disabled")
                  rep.bind('<Return>', verif)
                  
                  msg = tk.Label(fen, text="", state="disabled")
                  
                  btn = tk.Button(fen, text="Démarrer", command=init)
                  
                  
                  #Placement des objets
                  for child in fen.winfo_children():
                      child.pack()

                  -
                  Edité par Olygrim 20 mai 2015 à 12:29:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Précepte: Le mieux est l'ennemi du bien
                    20 mai 2015 à 17:15:14

                    Mais je suis du genre violent moi! Je fais pas dans la dentelle xP

                    Et l'organisation des questions est de toi Olygrim, tu m'avais déjà aidé au moment de FAIRE le Qcm et que j'avais posté sur le forum pour demander de l'aide en fait >.< Mais merci quand meme xS

                    Plus sérieusement, l'utilisation des classes m'a ducoup été conseillé par fauquette plus haut. Et je voulais un peu de challenge est justement ne pas faire une simple zone d'entrée mais des cases à cocher x)

                    Cependant je crois que je vais déjà me contenter de ça, on verra après ^^

                    Je vais déjà essayer de faire quelque chose avec l'exemple que tu m'as donné. J'ai cherché mais je ne comprend pas trop la fonction du "fen.winfo_children" =s 
                    Et si possible, pourrais tu m'expliquer le début de la fonction "suivant", je ne comprend pas le fonctionnement du "choice" et comment le programme fait pour savoir que le dernière indice de la liste est la réponse, le deuxième le premier choix,...? 
                    Est-ce que il permet de séparer les différentes parties de la liste et permet d'associer la variables à l'élément de la liste correspondant? 

                    J'ai pas eu le temps de finir mais voila déjà ce que j'ai pu faire en me servant de ton exemple : 

                    # -*-coding:Latin-1 -*
                    
                    from tkinter import *
                    
                    fenetre = Tk()
                    
                    champ_label1= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
                    champ_label1.pack()
                    
                    champ_label2= Label(fenetre, text="Quel est votre nom ?")
                    champ_label2.pack()
                    
                    var_texte = StringVar()
                    ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
                    ligne_texte.pack()
                    
                    nomJoueur = var_texte.get()
                    champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
                    champ_label3.pack()
                    
                    bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.destroy)
                    bouton_quitter.pack()
                    
                    fenetre.mainloop()
                    
                    questions=[["\n1.Quelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
                    ["\n2.Quelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\n","B.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\n","C.Un dossier ne peut contenir que du texte\n", "A"],
                    ["\n3.Quelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\n","B.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\n","C.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
                    ["\n4.Trois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\n","B. Le modem.\n","C. Le Cederom.\n", "B"],
                    ["\n5.Un seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\n","B. Le scanner.\n","C. Le moniteur\n", "C"],
                    ["\n6.Qu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\n","B. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\n","C.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
                    ["\n7.Un seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\n","B. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\n","C.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
                    ["\n8.Pour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\n","B. J\'appelle mon fichier \"disquette A\".\n","C.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
                    ["\n9.Quelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\n","B. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\n","C.Copier le document , puis le coller dans le dossier de son choix\n","B"],
                    ["\n10.Que signifie le sigle 'www' ?\n", "A. Waste Work Web.\n","B.Wild Wild West.\n","C.World Wide Web\n","C"]]
                    	
                    
                    
                    fenetre2 = Tk()
                    	
                    def valider(event):
                    	pointsplus = 0
                    	pointsmoins = 0
                    	if rep.get()==question[4]:
                    		pointsplus = pointsplus+2
                    		champ_label7= Label(fenetre2, text="Bonne réponse!")
                    		champ_label7.pack()	
                    	else:
                    		pointsmoins = pointsmoins+2
                    		champ_label7= Label(fenetre2, text="C'est pas ça...")
                    		champ_label7.pack()	
                    			
                    	
                    for question in questions:
                    	
                    	champ_label4= Label(fenetre2, text=question[0])
                    	champ_label4.pack()	
                    	choix1= Label(fenetre2, text=question[1])
                    	choix1.pack()	
                    	choix2= Label(fenetre2, text=question[2])
                    	choix2.pack()	
                    	choix3= Label(fenetre2, text=question[3])
                    	choix3.pack()	
                    	rep = Entry(fenetre2, state="normal")
                    	rep.pack()
                    	rep.bind('<Return>', valider)
                    	
                    	Bouton = Button(fenetre2,text = "Next",command = init)
                    	Bouton.pack()
                    	fenetre.mainloop()
                    
                    	
                    R = pointsplus - pointsmoins
                    
                    
                    
                    niveaux=[["20","Bravo"],
                            ["16","Presque excellent"],
                            ["12","Peut mieux faire"],
                            ["10","C'est limite"],
                            ["5","Rate"],
                            ["2","Pourquoi as-tu fais ce test?"]]
                    		
                    for niveau in niveaux: 
                    	if R >= int(niveau[0]):
                    		champ_label5= Label(fenetre2, text= R)
                    		champ_label5.pack()
                    		champ_label6= Label(fenetre2, text= niveau[1])
                    		champ_label6.pack()			
                    		break
                    
                    
                    

                    Il m'affiche bien la question, les 3 choix, la zone d'entrée mais ne change pas de page quand je fais entrée, il m'affiche juste le message qui spawn en dessous. 

                    Merci encore à ceux qui pourront aider! =) 


                     



                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mai 2015 à 17:49:41

                      "Et l'organisation des questions est de toi Olygrim"

                      Ah bah sincèrement je ne m'en rappelais pas :lol:. Comme généralement les personnes ont tendance à complexifier cette partie, je trouvais ta démarche cool ^^.

                      Bref, cessons de s'auto-congratuler.  La méthode winfo_children() liste tous les enfants de ta fenêtre. Ainsi, au lieu de passer à tous tes enfants une méthode commune une par une, tu fais une boucle. C'est par exemple le cas quand je place mes objets avec la méthode pack().

                      Ma fonction suivant() permet d'afficher une question. La première étape c'est de regarder si la liste de questions est remplie (le if lst_qst est équivalent à if lst_qst != 0). Si c'est le cas, on utilise la méthode choice, qui est une méthode du module random (que j'ai importé au début du code). choice permet de prendre une sous-liste aléatoirement dans ta liste (et j'attribue le résultat à ma variable lot). Ensuite je supprime la sous-liste (pour ne pas reposer la même question).

                      La grande ligne du if dans suivant() est ce qu'on appelle de l'unpacking. Voici 2 liens pour essayer de comprendre: ici et . Concrètement ça te permet de distribuer rapidement le contenu de la variable lot au bon objet. Une manière classique de faire serait:

                      qst["text"] = lot[0]
                      chx1["text"] = lot[1]
                      chx2["text"] =  lot[2]
                      chx3["text"] = lot[3]
                      ctrl[0] = lot[4]  #Ou lot[-1]

                      La deuxième partie de cette fonction (le else) est explicite je pense. Mais si tu as des questions là dessus n'hésite pas.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Précepte: Le mieux est l'ennemi du bien
                        21 mai 2015 à 11:17:02

                        Encore merci Olygrim =)

                        Malheuresement plsu j'avance avec ces nouveaux concept, plus je galère à m'y retrouver dans mon programme >.< 

                        Maintenant il ne m'affiche meme plus d'erreur, mais ne m'affiche pas de "fenetre2" non plus xS 

                        # -*-coding:Latin-1 -*
                        
                        from tkinter import *
                        from random import choice
                        
                        fenetre = Tk()
                        
                        champ_label1= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
                        champ_label1.pack()
                        
                        champ_label2= Label(fenetre, text="Quel est votre nom ?")
                        champ_label2.pack()
                        
                        var_texte = StringVar()
                        ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
                        ligne_texte.pack()
                        
                        nomJoueur = var_texte.get()
                        champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
                        champ_label3.pack()
                        
                        bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.destroy)
                        bouton_quitter.pack()
                        
                        fenetre.mainloop()
                        
                        questions=[["\n1.Quelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
                        ["\n2.Quelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\n","B.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\n","C.Un dossier ne peut contenir que du texte\n", "A"],
                        ["\n3.Quelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\n","B.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\n","C.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
                        ["\n4.Trois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\n","B. Le modem.\n","C. Le Cederom.\n", "B"],
                        ["\n5.Un seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\n","B. Le scanner.\n","C. Le moniteur\n", "C"],
                        ["\n6.Qu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\n","B. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\n","C.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
                        ["\n7.Un seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\n","B. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\n","C.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
                        ["\n8.Pour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\n","B. J\'appelle mon fichier \"disquette A\".\n","C.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
                        ["\n9.Quelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\n","B. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\n","C.Copier le document , puis le coller dans le dossier de son choix\n","B"],
                        ["\n10.Que signifie le sigle 'www' ?\n", "A. Waste Work Web.\n","B.Wild Wild West.\n","C.World Wide Web\n","C"]]
                        	
                        pointsplus = 0
                        pointsmoins = 0
                        
                        fenetre2 = Tk()
                        
                        def init():
                            for child in fenetre2.winfo_children():
                                child["state"] = "normal"
                         
                            #Utilisation de la fonction suivant() pour afficher la 1ère question
                            suivant()
                            #Changement de la fonction associée à btn pour la suite et de son texte
                            Bouton["text"] = "Question suivante"
                            Bouton["command"] = exercice	
                        		
                        def exercice(event):	
                        	for question in questions:
                        		if question:
                        			lot=choice(question)
                        			question.remove(lot)
                        			champ_label4= Label(fenetre2, text=question[0])
                        			champ_label4.pack()	
                        			choix1= Label(fenetre2, text=question[1])
                        			choix1.pack()	
                        			choix2= Label(fenetre2, text=question[2])
                        			choix2.pack()	
                        			choix3= Label(fenetre2, text=question[3])
                        			choix3.pack()	
                        			rep = Entry(fenetre2, state="normal")
                        			rep.pack()
                        			rep.bind('<Return>', valider)
                        	
                        			champ_label4["text"], choix1["text"], choix2["text"], choix3["text"], rep = lot
                        		
                        			Bouton = Button(fenetre2,text = "Next",command = init)
                        			Bouton.pack()
                        			fenetre.mainloop()
                        
                        			
                        def valider(event):
                        	
                        	if rep.get()==question[4]:
                        		pointsplus = pointsplus+2
                        		champ_label7= Label(fenetre2, text="Bonne réponse!")
                        		champ_label7.pack()
                        		return pointplus
                        	else:
                        		pointsmoins = pointsmoins+2
                        		champ_label7= Label(fenetre2, text="C'est pas ça...")
                        		champ_label7.pack()	
                        		return pointplus
                        
                        R = pointsplus - pointsmoins
                        
                        
                        
                        niveaux=[["20","Bravo"],
                                ["16","Presque excellent"],
                                ["12","Peut mieux faire"],
                                ["10","C'est limite"],
                                ["5","Rate"],
                                ["2","Pourquoi as-tu fais ce test?"]]
                        		
                        for niveau in niveaux: 
                        	if R >= int(niveau[0]):
                        		champ_label5= Label(fenetre2, text= R)
                        		champ_label5.pack()
                        		champ_label6= Label(fenetre2, text= niveau[1])
                        		champ_label6.pack()			
                        		break
                        
                        for child in fenetre2.winfo_children():
                            child.pack()
                        

                        Help ? ='(

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 mai 2015 à 12:26:55

                          "Malheureusement plus j'avance avec ces nouveaux concept, plus je galère à m'y retrouver dans mon programme"

                          Justement ce que j'utilise ce ne sont pas des nouveaux concepts. Ce sont au contraire des concepts de base (à part l'unpacking ^^). Le reste c'est juste des fonctions et l'utilisation de variables muables :lol:.

                          Ton problème c'est que tu réfléchis de manière "classique", alors que ton programme va tourner dans une interface. Or dans une interface, ce sont les événements (entrée utilisateur, clic de souris, appuie sur un bouton, ....) qui font évoluer le code. Deux exemples: Lorsqu'une fonction est liée à un événement, on N'UTILISE PAS le mot-clé return. Il faut penser différemment. Faire en sorte que le résultat soit enregistrer directement dans une variable (d'où l'utilisation de variables muables), ou que le résultat soit directement affiché dans l'interface.

                          L'utilisation d'une variable muable est une astuce. Les variables muables (les listes, les dictionnaires, ...) sont des variables qui lorsqu'elles sont modifier, ne vont pas changer d'adresse mémoire. À l'opposé, on trouve les variables immuables (les chaînes de caractères, les tuples, les entiers, ....). Le problème des variables muables/immuables se rencontrent notamment dans les fonctions.

                          Les variables créées à l'intérieur d'une fonction, ont une portée d'utilisation restreinte. Elle ne sont accessibles que dans la fonction en elle-même. C'est ce qu'on appelle la portée lexicale. Ceci est vrai pour TOUTES les variables: immuables et muables. MAIS, et c'est là l'astuce, si ta variable a été créée à l'extérieur de ta fonction ET si ta variable est muable, alors tu pourra la modifier à l'intérieur de la fonction:

                          #Une chaine est immuable
                          chn = "Hello"
                          
                          #Une liste est muable
                          lst = ["Goodbye"]
                          
                          def changer_chn():
                              chn += " World"
                          
                          def changer_lst():
                              lst[0] += " Deponia"
                          
                          
                          #Appel des fonctions:
                          changer_chn()  #renvoie une erreur
                          changer_lst()  #le travail est bien fait
                          print(lst)


                          D'habitude, on utilise le mot-clé return pour modifier PROPREMENT une variable:

                          def changer_chn():
                              #Ici je créé une nouvelle chaine à partir de la variable immuable.
                              #Mais je ne change pas celle-ci directement dans ma fonction
                              chaine = chn + " World"
                              return chaine
                          
                          
                          #Et j'associe ce que renvoie ma fonction à ma variable
                          chn = changer_chn()
                          print(chn)


                          MAIS, on ne peux pas utiliser le mot-clé return car on est maintenant dans une interface. Il faut donc ruser et utiliser les variables muables :D pour récupérer le résultat. C'est pour cela que dans le code que je t'ai donné, j'ai créé une variable ctrl (ctrl pour contrôle) qui est une liste et qui va avoir 2 éléments: la réponse en premier, et le score en deuxième. Mais au lieu d'enregistrer ton score dans la liste, tu peux directement afficher l'afficher dans un label (que tu aura appelé par exemple .....score ;)). Et donc tu utilises le paramètre text du label pour modifier "en live" dans ta fonction le texte: score["text"] = int(score["text"]) + 1. Une autre possibilité serait d'utiliser les variables tkinter (IntVar, StringVar, ...) mais leur utilisation est un peu plus complexe, et sont-elles simplement muables? À vérifier.

                          Le deuxième exemple pour un changement de réflexion quand on utilise une interface, c'est ton utilisation de la boucle for dans ta fonction exercice(). Il faut encore une fois PENSER DIFFÉREMMENT ;). Ce n'est plus la boucle qui va passer les questions à la suite des autres (et donc créer un ensemble complexe de boutons à chaque itération) MAIS une interaction avec l'utilisateur. J'ai décidé (mais on peux faire autrement) de lier ma fonction verif() à la touche Entrée (ligne 68 de mon code): rep.bind("<Return>", verif). Autrement dit, à chaque fois que l'utilisateur va appuyer sur la touche Entrée une fois sa réponse écrite (il faut qu'il appuie sur Entrée quand il est dans l'objet Entry que j'ai appelé ici rep), un petit message s'affiche, et je réactive le bouton pour passer à la question suivante.

                          Enfin, une dernière précision. Évite au maximum la création d'objet dans les fonctions (comme dans la fonction exercice()). Encore une fois à cause de la portée lexicale des variables. Le problème dans le cas de l'interface, c'est que tu pense que ces objets existent à l'extérieur car ils sont visibles dans ton interface. CE N'EST PAS LE CAS. Ils existent dans l'interface, mais si tu veux changer leur couleur, leur texte, ... tu ne pourra pas. SAUF, si tu utilise .......... une variable muable pour les stocker :lol:

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Précepte: Le mieux est l'ennemi du bien
                            21 mai 2015 à 15:09:35

                            Merci pour cette petite leçon! :ange:

                            Non ce ne sont pas de "nouveaux" concepts, mais ils sont nouveau pour moi x)

                            En essayant de suivre ton enseignement (sensei :ninja:), j'ai tout mis dans des fonctions et j'ai quasiment fais EXACTEMENT comme dans ton exemple >< (Quel imposteur je fais x[ )

                            Et pourtant...ma première fenetre s'affiche...je clique sur le "GOOOOO!!" et puis......RIEN DU TOUT D'x
                            Je comprend absolument pas pk rien ne s'affiche =(

                            Je n'ai pas d'erreurs en retour, juste la console qui se ferme.  

                            Je remet le code quand meme =( :

                            ctrl=["",0]
                            	
                            def init():
                                for child in fenetre2.winfo_children():
                                    child["state"] = "normal"
                                
                                exercice()
                                #Changement de la fonction associée à btn pour la suite et de son texte
                                Bouton["text"] = "Question suivante"
                                Bouton["command"] = exercice	
                            		
                            def exercice():	
                            	if question:
                            		lot=choice(question)
                            		question.remove(lot)
                            		laquestion["text"], choix1["text"], choix2["text"], choix3["text"], ctrl[0] = lot
                            		Bouton["state"]="disabled"
                            			
                            	else:
                            		for child in fenetre2.winfo_children():
                            			child["statut"]="disabled"
                            			
                            		appreciation()
                            		Bouton["state"] = "normal"
                            		Bouton["text"] = "Quitter"
                            		Bouton["command"] = fen.destroy 
                            			
                            def valider(event):
                            	
                            	if rep.get()==question[4]:
                            		ctrl[1]=ctrl[1]+2
                            		Message["text"]="Bonne réponse!"
                            		
                            	else:
                            		Message["text"]="C'est pas ça..."
                            			
                            	Bouton["state"] = "normal"
                            	Bouton["text"] = "Next"
                            	Bouton["command"] = init
                            
                            def appreciation():
                            	niveaux=[["20","Bravo"],
                            			["16","Presque excellent"],
                            			["12","Peut mieux faire"],
                            			["10","C'est limite"],
                            			["5","Rate"],
                            			["2","Pourquoi as-tu fais ce test?"]]
                            		
                            	for niveau in niveaux: 
                            		if ctrl[1] >= int(niveau[0]):
                            			Note= Label(fenetre2, text= R)
                            			Message= Label(fenetre2, text= niveau[1])		
                            			
                            
                            
                            fenetre2 = Tk()
                            laquestion= Label(fenetre2, text="")
                            choix1= Label(fenetre2, text="")	
                            choix2= Label(fenetre2, text="")	
                            choix3= Label(fenetre2, text="")	
                            rep = Entry(fenetre2, state="normal")
                            rep.bind('<Return>', valider)
                            Message = Label(fenetre2, text="")
                            Note = Label(fenetre2, text="")
                            Bouton = Button(fenetre2,text = "",command = init)
                            
                            for child in fenetre2.winfo_children():
                                child.pack()

                            Et je me pose la question si le problème viens pas du pc finalement prck meme le programme que tu m'as envoyé ne veut pas s'afficher :colere:

                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 mai 2015 à 15:32:19

                              Alors déjà ton code est beaucoup plus dans l'esprit de la programmation événementielle ^^.

                              Le problème peut venir de ta deuxième instance de Tk(). En tkinter, on ne doit jamais utiliser 2 instances de Tk(). Ta deuxième fenêtre devrait être une Toplevel().

                              Juste une dernière précision sur ce que j'ai dit précédemment. Quand on fait un programme non piloté par les événements (un code "classique"), les instructions s'exécutent les unes à la suite des autres. Même si tu peux créer des embranchements (avec des if, ...), l'exécution reste linéaire. Avec une interface c'est différent. Ça dépend totalement de ce que va faire l'utilisateur. Et donc cette programmation est surtout décomposer en fonctions, fonctions qui seront liés à des événements. Si tu regarde ton nouveau code, il y a une partie linéaire (la création de l'interface) et tout le reste est placé dans des fonctions. Et chaque action de l'utilisateur va appeler la fonction associée.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Précepte: Le mieux est l'ennemi du bien
                                21 mai 2015 à 15:38:08

                                Mais pourquoi quand je veux appeler par exemple ma fonction "init()" juste après la création de ma première interface, afin donc de lancer la suite, il me dit qu'elle n'existe pas. J'aurai voulu que mon bouton "GOO" lance la suite =(

                                Une fonction déclarée dans un programme n'a-t-elle pas une portée globale ?

                                -
                                Edité par Nightfever 21 mai 2015 à 15:38:58

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  21 mai 2015 à 15:40:20

                                  C'est normal qu'il n'y ai pas de fenetre2.mainloop() ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 mai 2015 à 15:51:54

                                    "il me dit qu'elle n'existe pas."

                                    Normal, car tu utilise la méthode winfo_children() de la deuxième fenêtre, or celle-ci n'existe pas encore ;)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Précepte: Le mieux est l'ennemi du bien
                                      21 mai 2015 à 16:03:19

                                      Ah ducoup tout les "child" que je met dans ma boucle avec le winfo_children() appartiennent à la deuxième fenetre ? 

                                       Comment je fais pour appeler le init() une première fois alors? 
                                      Maintenant, avec le mainloop de la fenetre 2 (merci fauquette), j'ai 2 fenetre qui s'affichent mais avec rien dedans =( 

                                      -
                                      Edité par Nightfever 21 mai 2015 à 16:06:10

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 mai 2015 à 16:07:59

                                        Exact :). La méthode winfo_children() LISTE tous les enfants de l'objet à laquelle tu l'a associée. Et ici c'est à fenetre2
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Précepte: Le mieux est l'ennemi du bien
                                          21 mai 2015 à 16:09:59

                                          Remontre ton code en entier stp.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Précepte: Le mieux est l'ennemi du bien
                                            21 mai 2015 à 16:13:46

                                            # -*-coding:Latin-1 -*
                                             
                                            from tkinter import *
                                            from random import choice
                                             
                                            #fenetre = Tk()
                                             
                                            #champ_label1= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
                                            #champ_label1.pack()
                                             
                                            #champ_label2= Label(fenetre, text="Quel est votre nom ?")
                                            #champ_label2.pack()
                                             
                                            #var_texte = StringVar()
                                            #ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
                                            #ligne_texte.pack()
                                             
                                            #nomJoueur = var_texte.get()
                                            #champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
                                            #champ_label3.pack()
                                             
                                            #bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.destroy)
                                            #bouton_quitter.pack()
                                            
                                            #fenetre.mainloop()
                                             
                                            questions=[["\n1.Quelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
                                            ["\n2.Quelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\n","B.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\n","C.Un dossier ne peut contenir que du texte\n", "A"],
                                            ["\n3.Quelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\n","B.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\n","C.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
                                            ["\n4.Trois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\n","B. Le modem.\n","C. Le Cederom.\n", "B"],
                                            ["\n5.Un seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\n","B. Le scanner.\n","C. Le moniteur\n", "C"],
                                            ["\n6.Qu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\n","B. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\n","C.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
                                            ["\n7.Un seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\n","B. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\n","C.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
                                            ["\n8.Pour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\n","B. J\'appelle mon fichier \"disquette A\".\n","C.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
                                            ["\n9.Quelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\n","B. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\n","C.Copier le document , puis le coller dans le dossier de son choix\n","B"],
                                            ["\n10.Que signifie le sigle 'www' ?\n", "A. Waste Work Web.\n","B.Wild Wild West.\n","C.World Wide Web\n","C"]]
                                                
                                             
                                            ctrl=["",0]
                                                 
                                            def init():
                                                for child in fenetre2.winfo_children():
                                                    child["state"] = "normal"
                                                 
                                                exercice()
                                                #Changement de la fonction associée à btn pour la suite et de son texte
                                                Bouton["text"] = "Question suivante"
                                                Bouton["command"] = exercice   
                                                     
                                            def exercice():
                                                if questions:
                                                    lot=choice(questions)
                                                    questions.remove(lot)
                                                    laquestion["text"], choix1["text"], choix2["text"], choix3["text"], ctrl[0] = lot
                                                    Bouton["state"]="disabled"
                                                         
                                                else:
                                                    for child in fenetre2.winfo_children():
                                                        child["statut"]="disabled"
                                                         
                                                    appreciation()
                                                    Bouton["state"] = "normal"
                                                    Bouton["text"] = "Quitter"
                                                    Bouton["command"] = fen.destroy
                                                         
                                            def valider(event):
                                                 
                                                if rep.get()==questions[4]:
                                                    ctrl[1]=ctrl[1]+2
                                                    Message["text"]="Bonne réponse!"
                                                     
                                                else:
                                                    Message["text"]="C'est pas ça..."
                                                         
                                                Bouton["state"] = "normal"
                                                Bouton["text"] = "Next"
                                                Bouton["command"] = init
                                             
                                            def appreciation():
                                                niveaux=[["20","Bravo"],
                                                        ["16","Presque excellent"],
                                                        ["12","Peut mieux faire"],
                                                        ["10","C'est limite"],
                                                        ["5","Rate"],
                                                        ["2","Pourquoi as-tu fais ce test?"]]
                                                     
                                                for niveau in niveaux:
                                                    if ctrl[1] >= int(niveau[0]):
                                                        Note= Label(fenetre2, text= R)
                                                        Message= Label(fenetre2, text= niveau[1])      
                                                         
                                             
                                            
                                            fenetre2 = Toplevel()
                                            laquestion= Label(fenetre2, text="")
                                            choix1= Label(fenetre2, text="")   
                                            choix2= Label(fenetre2, text="")   
                                            choix3= Label(fenetre2, text="")   
                                            rep = Entry(fenetre2, state="normal")
                                            rep.bind('<Return>', valider)
                                            Message = Label(fenetre2, text="")
                                            Note = Label(fenetre2, text="")
                                            Bouton = Button(fenetre2,text = "",command = init)
                                            fenetre2.mainloop()
                                            
                                            for child in fenetre2.winfo_children():
                                            	child.pack()
                                            J'ai mis le début en commentaire pour juste essayer de faire marcher au moins une première fenetre x'(
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              21 mai 2015 à 16:26:25

                                              Ça fonctionne si tu utilise la méthode mainloop() après avoir placé tes objets :lol::

                                              for child in fenetre2.winfo_children():
                                                  child.pack()
                                              
                                              fenetre2.mainloop()
                                              

                                              Sinon, pour ton objet Bouton, il faudrait mettre un petit texte. Mais teste ton code en entier en changeant juste la place de ton mainloop() tu verra bien :)

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Précepte: Le mieux est l'ennemi du bien
                                                21 mai 2015 à 16:40:06

                                                Alors petite rectification: puisque tu détruit ta première fenêtre, ta deuxième doit être un objet Tk(). Sinon tu as 2 fenêtres qui s'ouvrent.

                                                PS: dans ton code il y a une erreur (parce que je n'avais jamais la bonne réponse ;)). Dans ta fonction valider() ce n'est pas à questions[4] auquel il faut comparer l'entrée utilisateur mais ctrl[0]:

                                                rep.get() == ctrl[0]:



                                                -
                                                Edité par Olygrim 21 mai 2015 à 16:43:38

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Précepte: Le mieux est l'ennemi du bien
                                                  21 mai 2015 à 16:59:16

                                                  OMMG !!! THAT WORK! (Presque xP)

                                                  Les Questions s’enchaînent, il faut que j'arrive à rafraîchir l'Entry et le Label qui dit "Bonne réponse" et "C'est pas ça..."  peut etre aussi faire des fonctions de vérifications de ce que l'utilisateur rentre mais je vais essayer au moins de faire ça tout seul >.< (sa en fera au moins une partie ^^")

                                                  Une fois les questions finies cependant, il ferme l'interface et m'affiche cette erreur dans la console :

                                                  Une petite idée de ce que ça veut dire ? =S

                                                  Un problème avec ma fonction "appreciation" non? 

                                                  Mais déjà un I-M-M-E-N-S-E merci Olygrim pour toute ton aide =D

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    21 mai 2015 à 18:10:03

                                                    C'est parce que tu as confondu statut et state dans ta fonction exercice():

                                                    child["state"]="disabled"


                                                    "Mais déjà un I-M-M-E-N-S-E merci Olygrim pour toute ton aide =D"

                                                    De rien :D. Ça m'entraîne aussi.

                                                    -
                                                    Edité par Olygrim 21 mai 2015 à 18:53:53

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Précepte: Le mieux est l'ennemi du bien
                                                      22 mai 2015 à 10:58:20

                                                      Olygrim a écrit:

                                                      De rien :D. Ça m'entraîne aussi.

                                                      Haha ^^ 
                                                      Eh bien j'ai encore un peu d'entrainement pour toi alors xP

                                                      J'y suis presque mais sur la dernière fenetre d'appréciation, il m'affiche toutes les fois où il fait la boucle en fait..

                                                      Comment je fais pour qu'il ne m'affiche l'appreciation seulement une fois qu'il a trouvé qu'elle niveau correspondait à la note ? 

                                                       
                                                      ctrl=["",0]
                                                           
                                                      def init():
                                                      	for child in fenetre2.winfo_children():
                                                      		child["state"] = "normal"
                                                           
                                                      	exercice()
                                                          #Changement de la fonction associée à btn pour la suite et de son texte
                                                      	#Bouton2["state"] = "disabled"
                                                      	Bouton["text"] = "Question suivante"
                                                      	Bouton["state"] = "disabled"   
                                                               
                                                      def exercice():
                                                      	if questions:
                                                      		lot=choice(questions)
                                                      		questions.remove(lot)
                                                      		laquestion["text"], choix1["text"], choix2["text"], choix3["text"], ctrl[0] = lot
                                                      		Bouton["state"]="disabled"
                                                                   
                                                      	else:
                                                      		for child in fenetre2.winfo_children():
                                                      			child["state"] = "disabled"
                                                      		Bouton2["state"] = "normal"
                                                      		Bouton2["text"] = "Terminer"
                                                      		
                                                      		
                                                      	
                                                                   
                                                      def valider(event):
                                                           
                                                          if rep.get()==ctrl[0]:
                                                              ctrl[1]=ctrl[1]+2
                                                              Message["text"]="Bonne réponse!"
                                                              
                                                          else:
                                                              Message["text"]="C'est pas ça..."
                                                                   
                                                          Bouton["state"] = "normal"
                                                          Bouton["text"] = "Question suivante"
                                                          Bouton["command"] = init
                                                       
                                                      def appreciation():
                                                      	
                                                      	fenetre3 = Tk()
                                                      	fenetre3.geometry("800x300+300+0")
                                                      	niveaux=[["20","Bravo"],
                                                                  ["16","Presque excellent"],
                                                                  ["12","Peut mieux faire"],
                                                                  ["10","C'est limite"],
                                                                  ["5","Rate"],
                                                                  ["2","Pourquoi as-tu fais ce test?"]]
                                                               
                                                      	for niveau in niveaux:
                                                      		if ctrl[1] >= int(niveau[0]):
                                                      			Note= Label(fenetre3, text= ctrl[1])
                                                      			Note.pack()
                                                      			Message= Label(fenetre3, text= niveau[1])      
                                                      			Message.pack()
                                                      	fenetre3.mainloop()
                                                      
                                                      fenetre2 = Tk()
                                                      fenetre2.geometry("800x300+300+0")
                                                      laquestion= Label(fenetre2, text="")
                                                      choix1= Label(fenetre2, text="")   
                                                      choix2= Label(fenetre2, text="")   
                                                      choix3= Label(fenetre2, text="")   
                                                      rep = Entry(fenetre2, state="disabled")
                                                      rep.bind('<Return>', valider)
                                                      Message = Label(fenetre2, text="")
                                                      Note = Label(fenetre2, text="")
                                                      Bouton = Button(fenetre2,text = "Start",command = init)
                                                      Bouton2 = Button(fenetre2,text = "Terminer",command = appreciation, state= "disabled")
                                                      
                                                      for child in fenetre2.winfo_children():
                                                      	child.pack()
                                                      
                                                      fenetre2.mainloop()

                                                      -
                                                      Edité par Nightfever 22 mai 2015 à 11:11:39

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        22 mai 2015 à 11:52:01

                                                        Ça je l'avais vu depuis longtemps ce petit souci ;). La première chose c'est d'inverser l'ordre des éléments, i.e. mettre la mauvaise appréciation en premier. Ensuite de mettre les notes en .... nombre directement ;). Et enfin, de ne pas mettre l'affichage à chaque itération (mais en sortie):

                                                        niveaux=[[2, "Pourquoi as-tu fais ce test?"],
                                                                 [5, "Rate"],
                                                                 [10, "C'est limite"],
                                                                 [12, "Peut mieux faire"],
                                                                 [16,"Presque excellent"],
                                                                 [20,"Bravo"]]
                                                        
                                                        for niveau in niveaux:
                                                            if ctrl[1] >= niveau[0]:
                                                                msg = niveau[1]
                                                        
                                                        #Affichage en dehors de la boucle
                                                        Label(fenetre3, text= ctrl[1]).pack()
                                                        Label(fenetre3, text= msg).pack()

                                                        PS: puisque tu créé des objets dans une fonction, les nommer n'a pas d'intérêt. Tu peux de suite utiliser la méthode pack()

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Précepte: Le mieux est l'ennemi du bien
                                                          22 mai 2015 à 16:40:49

                                                          C'est génial x)

                                                          Bon il faut que je travail sur ma logique un peu quand même parce-que j'arrive pas à faire des trucs que je trouve évident unf ois sous les yeux c'est lourd x(

                                                          Encore merci Olygrim, je ne serai rien sans toi =D
                                                          ^^

                                                          Bonne continuation, sujet résolu =)

                                                          Le code une dernière fois en entier pour ceux qui ont besoin:

                                                          # -*-coding:Latin-1 -*
                                                           
                                                          from tkinter import *
                                                          from random import choice
                                                           
                                                          fenetre = Tk()
                                                           
                                                          champ_label1= Label(fenetre, text="Bienvenue dans notre QCM sur le B2i lycee, nous proposons une question par item, chaque item est range dans son domaine respectif.\nRappelons que pour valider le B2i, il faut valider les cinq domaines \nAttention ! Pour valider les cinq domaines, il faut valider au moins 80% du B2i en ayant 50% de bonne reponses minimum dans chaque domaine.\n")
                                                          champ_label1.pack()
                                                           
                                                          champ_label2= Label(fenetre, text="Quel est votre nom ?")
                                                          champ_label2.pack()
                                                           
                                                          var_texte = StringVar()
                                                          ligne_texte = Entry(fenetre, textvariable=var_texte, width=30)
                                                          ligne_texte.pack()
                                                           
                                                          nomJoueur = var_texte.get()
                                                          champ_label3= Label(fenetre, text="Pret?"+nomJoueur+" Alors commencons !\n")
                                                          champ_label3.pack()
                                                           
                                                          bouton_quitter = Button(fenetre, text="GOOOO!", command=fenetre.destroy)
                                                          bouton_quitter.pack()
                                                          
                                                          fenetre.mainloop()
                                                           
                                                          questions=[["\nQuelle est la signification du mot fichier ?\n" , "A.Il s\'agit du nom donne a un document enregistre a partir de l`ordinateur.\n","B.Un fichier peut contenir une image, du texte ecrit, ou meme du son.\n","C.Un fichier ne peut contenir que du texte\n ", "C"],
                                                          ["\nQuelle est la signification du mot dossier ?\n" , "A.Il s\'agit du nom donne a un document enregistre uniquement sur une disquette.\n","B.Un dossier peut contenir plusieurs fichiers differents:Un fichier image, un fichier texte, ou meme un fichier son.\n","C.Un dossier ne peut contenir que du texte\n", "A"],
                                                          ["\nQuelle est la bonne definition ?\n" , "A.La corbeille, C\'est un accessoire qui sert a trier un fichier.\n","B.Un icone, Il s\'agit d\'une petite image qui permet de realiser une action sur l`ordinateur ou d\'acceder a un logiciel.\n","C.Un dossier, C\'est le nom d`un seul fichier que l`on considere comme tres important\n","B"],
                                                          ["\nTrois d\'entre eux ont une fonction identique : memoriser l\'information, Rechercher l\'intrus qui s\'est glisse dans cette liste\n", "A. Une disquette.\n","B. Le modem.\n","C. Le Cederom.\n", "B"],
                                                          ["\nUn seul des quatre ne permet pas de saisir de l\'information. Lequel ?\n ", "A. Le microphone.\n","B. Le scanner.\n","C. Le moniteur\n", "C"],
                                                          ["\nQu\'est ce qu`un modem?\n", "A. Un modem est un compteur qui permet de relever le temps d`une conversation.\n","B. Un modem est un appareil qui permet l\'echange d\'informations entre des ordinateurs via les lignes telephoniques (voir reseaux informatiques). Le modem sert d\'intermediaire et permet de transformer le langage de l\'ordinateur pour que le message puisse se deplacer dans les fils du telephone.\n","C.Un modem est un boitier qui remplace la ligne de telephone\n","B"],
                                                          ["\nUn seul correspond a la bonne definition et au bon usage de l\'imprimante. Lequel?\n", "A.Elle dispose d`un ruban enduit d\'encre qui permet d\'imprimer du texte ou des images. Il suffit de relier l\'imprimante a l\'ordinateur et a une prise de courant pour qu\'elle fonctionne.\n","B. Une imprimante dispose d\'une ou plusieurs cartouches d`encre. Lorsqu\'une cartouche est vide il convient de la changer (ou sur certains modeles de la remplir d\'encre.). Pour pouvoir fonctionner correctement une imprimante doit etre reconnu par l\'ordinateur au moment de son installation.\n","C.Une imprimante est un systeme qui permet d`envoyer et de recevoir des fichiers\n","B"],
                                                          ["\nPour enregistrer un travail sur une disquette...\n", "A. Je vais dans \"fichier \" et \"enregistrer sous \" et je selectionne le lecteur de disquettes A,\(ou il est ecrit \"enregistrer dans\" \).\n","B. J\'appelle mon fichier \"disquette A\".\n","C.Je fais un copier-coller sur le bureau pour enregistrer sur la disquette 'A'\n","A"],
                                                          ["\nQuelle est la bonne procedure pour enregister un fichier ?\n", "A. Cliquer sur enregistrer et choisir le dossier dans la liste.\n","B. Cliquer sur 'Enregistrer sous ...' , et choisir le dossier dans la liste.\n","C.Copier le document , puis le coller dans le dossier de son choix\n","B"],
                                                          ["\nQue signifie le sigle 'www' ?\n", "A. Waste Work Web.\n","B.Wild Wild West.\n","C.World Wide Web\n","C"]]
                                                              
                                                           
                                                          ctrl=["",0]
                                                               
                                                          def init():
                                                          	for child in fenetre2.winfo_children():
                                                          		child["state"] = "normal"
                                                               
                                                          	exercice()
                                                              #Changement de la fonction associée à btn pour la suite et de son texte
                                                          	#Bouton2["state"] = "disabled"
                                                          	Bouton["text"] = "Question suivante"
                                                          	Bouton["state"] = "disabled"   
                                                                   
                                                          def exercice():
                                                          	if questions:
                                                          		lot=choice(questions)
                                                          		questions.remove(lot)
                                                          		laquestion["text"], choix1["text"], choix2["text"], choix3["text"], ctrl[0] = lot
                                                          		Bouton["state"]="disabled"
                                                                       
                                                          	else:
                                                          		for child in fenetre2.winfo_children():
                                                          			child["state"] = "disabled"
                                                          		Bouton2["state"] = "normal"
                                                          		Bouton2["text"] = "Terminer"
                                                          		
                                                          		
                                                          	
                                                                       
                                                          def valider(event):
                                                               
                                                              if rep.get()==ctrl[0]:
                                                                  ctrl[1]=ctrl[1]+2
                                                                  Message["text"]="Bonne réponse!"
                                                                  
                                                              else:
                                                                  Message["text"]="C'est pas ça..."
                                                                       
                                                              Bouton["state"] = "normal"
                                                              Bouton["text"] = "Question suivante"
                                                              Bouton["command"] = init
                                                           
                                                          def appreciation():
                                                          	
                                                          	fenetre3 = Tk()
                                                          	fenetre3.geometry("800x300+300+0")
                                                          	niveaux=[["2","Pourquoi as-tu fais ce test?"],
                                                                      ["5","Rate"],
                                                                      ["10","C'est limite"],
                                                                      ["12","Peut mieux faire"],
                                                                      ["16","Presque excellent"],
                                                                      ["20","Bravo"]]
                                                                   
                                                          	for niveau in niveaux:
                                                          		if ctrl[1] >= int(niveau[0]):
                                                          			app=niveau[1]
                                                          			
                                                          	Note= Label(fenetre3, text= ctrl[1]).pack()
                                                          	Message= Label(fenetre3, text= app).pack()  		
                                                          	fenetre3.mainloop()
                                                          
                                                          fenetre2 = Tk()
                                                          fenetre2.geometry("800x300+300+0")
                                                          laquestion= Label(fenetre2, text="")
                                                          choix1= Label(fenetre2, text="")   
                                                          choix2= Label(fenetre2, text="")   
                                                          choix3= Label(fenetre2, text="")   
                                                          rep = Entry(fenetre2, state="disabled")
                                                          rep.bind('<Return>', valider)
                                                          Message = Label(fenetre2, text="")
                                                          Note = Label(fenetre2, text="")
                                                          Bouton = Button(fenetre2,text = "Start",command = init)
                                                          Bouton2 = Button(fenetre2,text = "Terminer",command = appreciation, state= "disabled")
                                                          
                                                          for child in fenetre2.winfo_children():
                                                          	child.pack()
                                                          
                                                          fenetre2.mainloop()
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          QCM dans une interface

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown