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