Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion: Créer un QCM

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : juin 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Créer un QCM

    Bonjour, j'ai décidé de créer un Qcm avec Tkinter.
    Ma modélisation est la suivante : 1 module QCM (type de fenêtre qui contient les widgets de base qui va me permettre de créer autant d'objets questions que je veux) et en 2 un fichier(ou module) main qui gère les résultats.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    """
    Created on Tue Jun 11 00:13:11 2019
    CC : BY - NY - SA
    @author: Djn
    """
     
     
    import tkinter as tk
    from tkinter import font
    import math as mt
    import random as rd
    import time as t
     
     
     
     
    class Questions():
            '''Création des fenêtres types du QCM
            : type Questions (pour python)'''
            def __init__(self, texte,res1,res2,res3,res4,photo):
                    self.fenetre= tk.Tk()
                    self.mafont=font.Font(family='Helvetica', size=10, weight='bold')
                    self.fenetre['bg']='#9f9fcf'
                    self.fenetre.geometry("1000x800+300+0")
                    self.fenetre.title("NSI - Lycée Charlemagne - M Djahnit")
                    self.frame=tk.Frame(self.fenetre,borderwidth=2, relief='groove',padx=10,pady=10)
                    self.frame.config(width=600, height=200)
                    self.frame.grid_propagate(False)
                    self.texte=tk.Label(self.frame,text=texte,font=self.mafont)
                    self.bouton=tk.Button(self.fenetre, text ='Valider', font=self.mafont,command = self.valider )
                    can1=tk.Canvas(self.fenetre,width=200,height=200,bg='#4b4ab4')
                    photo1=tk.PhotoImage(file=photo,master=self.fenetre)
                    can1.create_image(100,100, image=photo1)
                    self.checkVar1 = tk.IntVar()
                    self.checkVar2 = tk.IntVar()
                    self.checkVar3 = tk.IntVar()
                    self.checkVar4 = tk.IntVar()
                    self.c1 = tk.Checkbutton(self.fenetre, text = res1,font=self.mafont, variable = self.checkVar1, \
                     onvalue = 1, offvalue = 0, height=10, \
                     width = 25)
                    self.c2 =tk. Checkbutton(self.fenetre, text = res2,font=self.mafont, variable = self.checkVar2, \
                     onvalue = 1, offvalue = 0, height=7, \
                     width = 25)
                    self.c3 = tk.Checkbutton(self.fenetre, text = res3,font=self.mafont, variable = self.checkVar3, \
                     onvalue = 1, offvalue = 0, height=7, \
                     width = 25)
                    self.c4 =tk. Checkbutton(self.fenetre, text = res4,font=self.mafont, variable = self.checkVar4, \
                     onvalue = 1, offvalue = 0, height=7, \
                     width = 25)
                    #Placement des widgets :
                    self.texte.grid(row =0,column =0,rowspan =3, padx =1, pady =5)
                    self.frame.grid(row=1,column=0)
                    can1.grid(row =3, column =0,rowspan=2, padx =10, pady =5)
                    self.c1.grid(row =0, column =1)
                    self.c2.grid(row =1, column =1)
                    self.c3.grid(row =2, column =1)
                    self.c4.grid(row =3, column =1)
                    self.bouton.grid(row =4, column =1)
     
     
                    self.fenetre.mainloop()
     
     
            def valider(self):
                if self.checkVar1 : return self.checkVar1
                elif self.checkVar2 : return self.checkVar2
                elif self.checkVar3 : return self.checkVar3
                elif self.checkVar4 : return self.checkVar4
                else : return -1
     
            def suivant(self):
                self.destroy()
    et mon deuxième fichier qui utilise les types Questions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    # -*- coding: utf-8 -*-
    """
    Created on Thu Jun 13 23:26:52 2019
    CC : BY - NY - SA
    @author: Djn
    """
     
    from QCM_nsiClasse import Questions
    import tkinter as tk
    from tkinter import font
    import math as mt
    import random as rd
    import time as t
     
    global score
    score = 0
     
    def aleaQuestions(questions,reponses,images):
     
         '''dict(int:str)*dict(int:list[str])*dict(int:str) -> Questions 
                Renvoie une fenêtre tkinter avec un qcm
         '''
         res=[]
         for (i,j) in questions.items():
             res.append(Questions(j,reponses[i][0],reponses[i][1],reponses[i][2],reponses[i][3],images[i]) )
         melange=rd.shuffle(res)
         for i in range(len(melange)):
             return melange[i]
    def note(p):
        score=score+int(p.valider())
        return score
     
     
     
    global images
    images = {1:'code1.gif',2:'code1.gif',3:'code1.gif',4:'code1.gif'}
    global questions
    questions={1:"QCM 1.1 : Thème Types et valeurs de base"+"\n"*2+
        "Combien d'entiers positifs ou nuls peut-on représenter" +
                     "\n"+"en machine sur 32 bits ?",
                  2:"QCM 1.2 : Thème Types et valeurs de base"+"\n"*2+
                      "Les entiers positifs ou nuls dont l'écriture en base 16 (hexadécimal)"+
                     "\n"+" est constituée par un 1 suivi de 0 (par exemple 1, 10, 100, 1000, etc.) sont : ",
                3:"Dans l’algorithme ci-dessous, qui prend en entrée un entier naturel non nul"+
                     "\n"+"et renvoie son écriture binaire, remplacer les pointillés par l’opérateur qui convient."+
                     "\n"+"def cascade(n): "+
                     "\n"+"    chiffres = ''"+
                     "\n"+"    while n != 0: "+
                     "\n"+"        chiffres = str(n … 2) + chiffres"+
                     "\n"+"        n = n //2 "+
                     "\n"+"   return chiffres ",
                    4:"On définit un tableau t rempli de 0 en langage Python." + "\n"+"Ce tableau est une liste de listes,"+"/n"+ 
                    " toutes les sous-listes ayant le même nombre d'éléments."+"\n"+
                     "t = [ [0, 0, …, 0], [0, 0, …, 0],     …    ,[0, 0, …, 0] ]" +"\n"+
                     "On appelle h le nombre de listes contenus dans t et l le nombre d'éléments "+"\n"+
                     "appartenant à ces listes. Parmi les propositions suivantes,"+"\n"+
                     "laquelle permet de calculer h et l ? "
     
                         }
    global reponses
    reponses={1:['2**32−1','2**32','2*32','32**2'], 
              2:[ "les puissances de 2  ",
                     'les puissances de 4 ',
                     'les puissances de 8 ','les puissances de 16 '],
              3:["//","%","+","*"],
              4:["h, l = len(t[0]), len(t) ","h, l = len(t[0]), len(t[1])", "h, l = len(t), len(t[0])","h, l = len(t[1]), len(t[0])" ] 
              }
    global solutions
    solutions={1:"2**32" , 3:"//" ,2:"les puissances de 16",4:"h, l = len(t), len(t[0])"}
     
     
    '''q1=Questions("QCM 1.1  ","Combien d'entiers positifs ou nuls peut-on représenter en machine sur 32 bits ?","2**32 −1 ",'2**32','2*32','32**2','code1.gif')
        q2=Questions("QCM 1.2 : Thème Types et valeurs de base  ",
                     "Les entiers positifs ou nuls dont l'écriture en base 16 (hexadécimal)"+
                     "\n"+" est constituée par un 1 suivi de 0 (par exemple 1, 10, 100, 1000, etc.) sont : ",
                     "les puissances de 2  ",
                     'les puissances de 4 ',
                     'les puissances de 8 ','les puissances de 16 ','code1.gif')
    '''
    #aleaQuestions(questions,reponses,images)
    q1=Questions(questions[1],reponses[1][0],reponses[1][1],reponses[1][2],reponses[1][3],images[1])
     
    print(note(q1))
    Alors premier prb : print(note(q1)) n'affiche rien ??? alors que j'ai cliquer sur une coche de cette première fenêtre q1 et que j'ai validé.
    Quelqu'un aurait-il une idée ? Merci

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 13 721
    Points : 23 095
    Points
    23 095

    Par défaut

    Citation Envoyé par djah2019 Voir le message
    Alors premier prb : print(note(q1)) n'affiche rien ??? alors que j'ai cliquer sur une coche de cette première fenêtre q1 et que j'ai validé.
    Quelqu'un aurait-il une idée ? Merci
    print(note(q1)) n'affiche rien parce que l'instruction n'est même pas exécutée car... une fois dans .mainloop on n'en ressort pas sans passer par .destroy ou .quit.

    Vous avez deux gros soucis:
    • découper son code en module n'est pas si trivial: essayez de faire fonctionner votre logique avec tout dans un seul script au moins dans un premier temps.
    • apprendre à programmer avec tkinter: faire fonctionner votre code en l'état demande une connaissance avancée de tkinter. Si vous l'aviez, vous ne poseriez pas de questions ici.... Par contre, faire cela de façon plus conventionnelle avec les informations trouvées dans n'importe quel tuto. est tout à fait accessible.

    à vous de voir

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : juin 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut reponse

    merci pour votre réponse, je vais mettre cela sur un seul script (bon conseil). je travaille avec spyder3 et une console ipython : donc même si je suis dans mainloop de tk... le print (q1) aurait dû s'afficher. bien-sûr que je peux passer avec Label de tk. j'essaierai mais je ne pense pas que cela change quoique ce soit. je retravaille demain ce programme et je poserai plus précisément ma question.

Discussions similaires

  1. Créer un QCM sans BDD
    Par Alem180 dans le forum Débuter
    Réponses: 12
    Dernier message: 31/08/2017, 06h56
  2. Créer un QCM sous WinDev
    Par amjdadar dans le forum WinDev
    Réponses: 4
    Dernier message: 15/07/2009, 15h02
  3. Comment créer un QCM en php/mysql?
    Par megapacman dans le forum Requêtes
    Réponses: 8
    Dernier message: 05/04/2008, 08h21
  4. comment créer un QCM en html/php
    Par aydin24alain dans le forum Débuter
    Réponses: 6
    Dernier message: 28/03/2008, 01h45
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo