Je fait appel à un fichier csv qui contient plus de trois cent question , dès lors, je fait un random sample pour n'avoir que 15 questions
jusque là, pas de soucis...
Ensuite, pour poser les question une à une, je fais appel à une boucle où je reconfigure à chaque fois mon groupe de bouton radio. mais là où ça foire, c'est lorsque je veux valider, je ne parviens pas à inscrire une commande correcte sur ce bouton
def branche_1(self):
#Exemple de chemin : 'C:\\Users\\user\\Desktop\\TIPE\\tableau\\Frequence1_bis.csv'
# /!\ Bien mettre les double slash et les guillemets. /!\
#Tableau sera une liste de listes [[t1, acc1], [t2,acc2] ,... , [tn,accn]]
#variable propres
Tableau = []
question = []
reponseA = []
reponseB = []
reponseC = []
solution = []
image = []
fileName=("./Data/branche_1.csv")
#on efface les labels inutiles
self.Bouton_yes.destroy()
self.Bouton_no.destroy()
self.Label1.destroy()
self.Label2.destroy()
self.Label3.destroy()
#on modifie le titre
self.Titre.config(text= "BRANCHE I - Connaissance de la réglementation sur la chasse et \n"\
"la conservation de la nature (questions n° 1 à 15)")
#boutons radio
self.svRadio = StringVar()
self.svRadio.set('0') #set à 0 pour tout décocher, sinon la value du bouton qu'on veut voir coché
self.case1 = Radiobutton(self.Mafenetre, text="", font = self.font12, variable=self.svRadio, value='1', height = 5, width = 35, relief = 'raised', wraplength = 300, anchor = W, justify = LEFT)
self.case1.grid(sticky = W, row = 2, column = 0, padx = 15, pady = 5)
self.case2 = Radiobutton(self.Mafenetre, text="", font = self.font12, variable=self.svRadio, value='2', height = 5, width = 35, anchor = W, wraplength = 300, relief = 'raised', justify = LEFT)
self.case2.grid(sticky = W, row = 3, column = 0, padx = 15, pady = 5)
self.case3 = Radiobutton(self.Mafenetre, text="", font = self.font12, variable=self.svRadio, value='3', height = 5, width = 35, anchor = W, wraplength = 300, relief = 'raised', justify = LEFT)
self.case3.grid(sticky = W, row = 4, column = 0, padx = 15, pady = 5)
#bouton vérif
self.Bouton_verif = Button(self.Mafenetre, text ='Valider', command = self.get_rep)
self.Bouton_verif.configure (font=self.font10b)
self.Bouton_verif.grid(sticky = SE, row = 4, column = 4, padx = 15, pady = 15)
#ouverture et lecture du fichier csv
f = open(fileName)
csv_f = csv.reader(f, delimiter = ";")
#on va melanger la liste et ne prendre que 15 question au hasard
Tableau = sample(list(csv_f), k=17)
# row = ligne ==> ça met le tableur dans le tableau sous forme de liste de listes
for row in csv_f:
Tableau.append(row)
#print (Tableau)
f.close
#on récupère les "sous listes" du Tableau
n = len(Tableau)
for i in range(n-1):
question.append(Tableau[i][0])
reponseA.append(Tableau[i][1])
reponseB.append(Tableau[i][2])
reponseC.append(Tableau[i][3])
solution.append(Tableau[i][4])
image.append(Tableau[i][5])
i=0
d = len(question)
print (str(d))
d-=1
print (str(d))
for i in range (d):
i +=1
self.poseQuestion.config(text="question " + str(i) +" : " +question [i])
#image...
self.image = PhotoImage(file="Img/"+image [i])
self.Img.config(image = self.image)
self.case1.config(text=reponseA [i], value=reponseA [i])
self.case2.config(text=reponseB [i], value=reponseB [i])
self.case3.config(text=reponseC [i], value=reponseC [i])
print ( "question " + str(i) +" : " +question [i] +":\n"+ "a: "+ reponseA [i] +"\nb: "+ reponseB [i] +"\nc: "+ reponseC [i] + "\nS: " + solution [1] + "\nPhoto: " + image [i])
#break
#return (question, reponseA, reponseB, reponseC, solution, image)
def get_rep(self):
self.Q=self.svRadio.get()
print("self.q:" + str(self.Q), (type(self.Q)))
self.branche_1()
Quand je fais appel à la commande get-rept(), la boucle se remet à zéro...
Euh, tu as fait une boucle en pensant que ça allait permettre présenter les questions une à une dans l'interface graphique ?
J'ai un peu de mal à comprendre le code et je vois beaucoup d'erreurs sur des choses basiques, des trucs que je suis surpris de voir chez quelqu'un qui aborde les interfaces graphiques.
Par exemple la boucle for ligne 69, le principe de la boucle for c'est qu'elle gère elle-même l'indice et son incrémentation, pas besoin de le faire explicitement (initialiser i et l'incrémenter comme tu le fais ligne 64 et 70).
Tu suis un cours en particulier ? On peut avoir le lien pour jauger de sa qualité ?
si je ne le fais pas, mon questionnaire commence à "0".
Ça fait bizarre parce que tu initialise i = 0 avant la boucle (alors que ça ne sert à rien), ça fait penser que tu ne sais pas comment les boucles for marchent.
Tu peux simplement écrire ça :
for i in range(x):
j = i+1
self.poseQuestion.config(text="question " + str(j) +" : " +question [j])
pierre3401 a écrit:
ET oui , la boucle est destinée à poser les question une à une, après validation via le
Bouton_verif
Je pense qu'il faudra pas faire de boucle, mais stocker la liste des questions dans la classe (ou une des classes si tu en as plusieurs) avec l'indice de la question actuelle, et à chaque fois que tu veux passer à la question suivante, incrémenter l'indice et afficher la question au nouvel indice.
Blond, bouclé, toujours le sourire aux lèvres...
problème de boucle avec un bouton valider tkinter
× 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.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...