Affichage d'une image et coder les réponses d'un qcm
Résolu
ArtKhaniste
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
quent217 Messages postés 420 Date d'inscription Statut Membre Dernière intervention -
quent217 Messages postés 420 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je débute sur python (et Tkinter) et j'aimerais coder un qcm avec une interface graphique correcte. Je souhaiterais donc faire apparaître une image à chacune des questions de mon qcm.
Mon problème est le suivant : l'image du menu principal est correctement affichée, mais l'image de la question d'histoire n'apparaît pas (sauf lorsque je donne une valeur négative à "pady").
De plus j'aimerais associer à chaque bouton, une commande qui permettrait de savoir si la réponse est vrai ou fausse ( ex: si on clique sur le bouton 2, la réponse est fausse), mais je ne sais pas vraiment comment le faire .
Merci de votre aide !
Je débute sur python (et Tkinter) et j'aimerais coder un qcm avec une interface graphique correcte. Je souhaiterais donc faire apparaître une image à chacune des questions de mon qcm.
Mon problème est le suivant : l'image du menu principal est correctement affichée, mais l'image de la question d'histoire n'apparaît pas (sauf lorsque je donne une valeur négative à "pady").
De plus j'aimerais associer à chaque bouton, une commande qui permettrait de savoir si la réponse est vrai ou fausse ( ex: si on clique sur le bouton 2, la réponse est fausse), mais je ne sais pas vraiment comment le faire .
Merci de votre aide !
from tkinter import *
from tkinter.messagebox import *
fenetre = Tk()
bon = 0
faux = 0
def H():
Fenetre= Tk()
#Photo Q1
Frame1 = Frame(Fenetre, borderwidth=5, relief=GROOVE)
Frame1.pack(side=TOP, padx=10, pady=10)
photo1 = PhotoImage(master= Fenetre, file="Libération.gif")
Label(Frame1, bg = "white", image=photo1).pack(padx=10, pady=10)
encadrement1 = LabelFrame(Frame1, text="Sélectionnez une réponse", padx=20, pady=20)
encadrement1.pack(fill="both", expand="yes")
#Q1
Label(encadrement1, text="La Deuxième guerre Mondiale eu lieu entre :").pack()
#Premier bouton
Bouton1 = Button(encadrement1, text = "1939-1945", command = oui)
Bouton1.pack(fill = "both", expand = "yes")
#Deuxième bouton
Bouton2 = Button(encadrement1, text = "1914-1918")
Bouton2.pack(fill = "both", expand = "yes")
#Troisième bouton
Bouton3 = Button(encadrement1, text = "1939-1954")
Bouton3.pack( fill = "both", expand = "yes")
#4ème bouton
Bouton4 = Button(encadrement1, text = "Menu principal", command= Fenetre.destroy)
Bouton4.pack(pady = 20)
#Interaface graphique
photo=PhotoImage(master = fenetre, file="photomenu.gif")
Frame1 = Frame(fenetre, bg="white", borderwidth=5, relief=GROOVE)
Frame1.pack(side=TOP, padx=10, pady=10)
Label(Frame1, text="Questionnaire de culture générale",bg="white", image=photo).pack(padx=10, pady=10)
encadrement = LabelFrame(Frame1, text="Jouer", padx=20, pady=20)
encadrement.pack(fill="both", expand="yes")
Label(encadrement, text="Sélectionnez une matière").pack()
#Boutons
bouton3= Button(encadrement,bg="white", text="Histoire", command= H)
bouton3.pack(pady= 0,expand ="yes", fill= "both")
bouton4 = Button(fenetre, bg="white", text="Quitter", command = fenetre.destroy)
bouton4.pack(side= BOTTOM, pady = 10)
encadrement.mainloop()
Frame1.mainloop()
fenetre.mainloop()
A voir également:
- Qcm traitement d'image
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Image iso - Guide
- Traitement de texte gratuit - Guide
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Acronis true image - Télécharger - Sauvegarde
1 réponse
Bonjour,
merci de spécifier le langage utilisé dans les balises de code (explications ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code) car sinon les indentations ne sont pas conservées et j'ai mis un peu de temps à retrouver jusque où va la fonction H.
Pour que l'image s'affiche correctement, il faut rajouter
Pour savoir si la réponse est correcte, il faut déjà associer une fonction à chaque bouton avec l'attribut command comme vous avez fait à certains endroits.
Ensuite il y a 3 possibilités :
Soit vous créez une fonction par bouton, mais ce n'est clairement pas une solution propre.
Soit vous créez une fonction correcte et une fonction incorrecte et vous associez à chaque bouton la fonction correspondante. Inconvénients :
- Vous savez uniquement si la réponse est correcte ou non sans savoir quelle réponse a été séléctionnée
- La bonne réponse est codé en dur dans le code et vous ne pouvez pas aller chercher l'information dans un fichier par exemple.
Dernière solution : vous mettez un argument dans la fonction
merci de spécifier le langage utilisé dans les balises de code (explications ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code) car sinon les indentations ne sont pas conservées et j'ai mis un peu de temps à retrouver jusque où va la fonction H.
Pour que l'image s'affiche correctement, il faut rajouter
Fenetre.mainloop()à la fin de la fonction H. Je ne sais pas vraiment pourquoi l'image est le seul élément qui ne s'affiche pas mais cela permet de dire à Tkinter d'actualiser correctement l'affichage.
Pour savoir si la réponse est correcte, il faut déjà associer une fonction à chaque bouton avec l'attribut command comme vous avez fait à certains endroits.
Ensuite il y a 3 possibilités :
Soit vous créez une fonction par bouton, mais ce n'est clairement pas une solution propre.
Soit vous créez une fonction correcte et une fonction incorrecte et vous associez à chaque bouton la fonction correspondante. Inconvénients :
- Vous savez uniquement si la réponse est correcte ou non sans savoir quelle réponse a été séléctionnée
- La bonne réponse est codé en dur dans le code et vous ne pouvez pas aller chercher l'information dans un fichier par exemple.
Dernière solution : vous mettez un argument dans la fonction
def verif(idBouton):et dans le bouton vous mettez
command = lambda:verif(1)et le 1 est remplacé par une valeur différente pour chaque bouton, ce qui permet de les différencier une fois dans la fonction verif.