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.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 """ 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()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é.
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 lalgorithme ci-dessous, qui prend en entrée un entier naturel non nul"+ "\n"+"et renvoie son écriture binaire, remplacer les pointillés par lopé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))
Quelqu'un aurait-il une idée ? Merci
Partager