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
| class QuestionOuiNon(Toplevel):
"""Définit une fenêtre question avec réponse oui ou non"""
def __init__(self, master, titre, message):
"""initialisation et construction"""
Toplevel.__init__(self, master) #init parent
self.protocol("WM_DELETE_WINDOW", self.destroy) #sortie par (X)
self.title(titre) #affiche le titre
self.iconbitmap("img/icare2.ico") #fichier ico
self.result = 'non' #valeur de retour par défaut
#composants
imgGIF = PhotoImage(file="./img/question.gif") #image de la fenêtre
labelImgGIF = Label(self, image=imgGIF) #affecte l'image au label
labelImgGIF.grid(row=0, column=0, padx=5, pady=5) #visualise l'image
lbMessage = Label(self, text=message) #label texte
lbMessage.grid(row=0, column=1, padx=5, sticky="we") #visualise le texte
frBouton = Frame(self) #frame pour les boutons
frBouton.grid(row=1, column=0, columnspan=2, sticky="we") #activation graphique
btOui = Button(frBouton, text="OUI", width=10) #bouton oui
btOui.pack(side=LEFT, padx=5, pady=5, anchor="w") #activation graphique
btOui.bind("<Button-1>", self.choixOui) #clic gauche souris
btOui.bind("<space>", self.choixOui) #validation par space bar
btOui.focus_set() #donne le focus
btNon = Button(frBouton, text="NON", width=10) #bouton non
btNon.pack(side=RIGHT, padx=5, pady=5, anchor="e") #activation graphique
btNon.bind("<Button-1>", self.choixNon) #clic gauche souris
btNon.bind("<space>", self.choixNon) #validation par space bar
#placement
self.update_idletasks() #met à jour les caractéristique
#de la fenêtre
self.transient(self.master) #???
w, h, mx, my, mw, mh = (self.winfo_width(), self.winfo_height(),\
self.master.winfo_rootx(), self.master.winfo_rooty(), \
self.master.winfo_width(), self.master.winfo_height())
#lecture des données géométriques
#de la fenêtre et de fen
x = "+"+str(mx+(mw-w)//2) #coordonnée x
y = "+"+str(my+(mh-h)//2) #coordonnée y (//2 = division entière)
self.geometry(x+y) #positionne la fenêtre
self.grab_set() #???
self.resizable(False, False) #non re-dimensionnable
self.wait_window() #boucle d'évènement locale
def choixOui(self, event):
"""Réponse oui"""
self.result = "oui" #affecte le choix
self.destroy() #détruit la fenêtre question
self.quit() #quitte la boucle d'évènements
def choixNon(self, event):
"""Réponse non"""
self.result = "non" #affecte le choix
self.destroy() #détruit la fenêtre question |
Partager