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
| class popUpID():
#########################################################################
############# Fenêtre d'identification (prénom et âge) #############
#########################################################################
def __init__(self, parent, bg='white', geometry="640x480+0+0", event=None):
global tkParent
tkParent = parent
#création de la toplevel
tkParent.identification = Toplevel(background=bg)
tkParent.identification.title('Qui suis-je ?')
tkParent.identification.geometry(geometry)
# Perso j'avais le bind au premier lancement mais bon... Mis avant l'overrideredirect
tkParent.identification.bind('<Escape>', self.gogogo) # A remplacer par self.Onquit pour test
# Bordure. Voir l'exemple sur http://effbot.org/tkinterbook/frame.htm
framecontour = Frame(tkParent.identification, height=2, background=bg, bd=1, relief=SUNKEN)
# création d'une frame pour la saisie
frameSaisie = Frame(framecontour, background=bg)
# prénom : servira à créer un profil (associé à la date de naissance) et à personnaliser le menu
labelPrenom = Label(frameSaisie, text='Mon prénom :', font=tkParent.tailleMessage, background=bg, fg='black')
self.saisiePrenom = Entry(frameSaisie, font=tkParent.tailleMessage)
# date de naissance : servira à créer un profil (associé au prénom) et à personnaliser le menu
labelDDN = Label(frameSaisie, text='Ma date\nde naissance :', font=tkParent.tailleMessage, background=bg, fg='black', pady=10)
self.CanvasAvecDate = Canvas(frameSaisie, width=tkParent.ecran_X(40), height=tkParent.ecran_Y(10), background=bg, borderwidth=0, highlightthickness=0)
self.dateDansCanvas = create_date(self.CanvasAvecDate,1,tkParent.ecran_Y(5),taille=int(40*tkParent.ratio_X),date='01/Janvier/2000',format='JJ/Mois/AAAA')
# bouton de validation 'gogogo'
boutonGo = Button(framecontour, text="C'est parti !", font=tkParent.tailleMessage, background=bg, fg='red', command = self.gogogo)
# affichage
framecontour .pack(fill=X, padx=5, pady=5)
frameSaisie .pack()
labelPrenom .grid(row=0, column=0, padx=20, pady=20)
self.saisiePrenom .grid(row=0, column=1, padx=20, pady=20, sticky='W')
labelDDN .grid(row=1, column=0, padx=20, sticky='W')
self.CanvasAvecDate .grid(row=1, column=1, padx=20, sticky='W')
boutonGo .pack(expand=1, pady=5)
# focus sur le prénom
self.saisiePrenom.focus_set()
# fini le gestionnaire de fenetre
tkParent.identification.overrideredirect(1)
#########################################################################
############# Procédure après clic gauche du bouton boutonGo ############
#########################################################################
def gogogo(self,event=None):
# Récupération du prénom
prenom = self.saisiePrenom.get()
# Récupération de la date de naissance (objet de type datetime) et de la date pour calcul de l'âge
ddn = self.dateDansCanvas.objetDatetime
aujourdhui = datetime.date.today()
age = aujourdhui.year - ddn.year
if (aujourdhui.month < ddn.month) or ((aujourdhui.month == ddn.month) and (aujourdhui.day < ddn.day)):
age -= 1
# Affichage des messages personnalisés de la fenêtre principale
tkParent.messageMenu11.config(text="{0}, {1} ans,\nfait des mathématiques.".format(prenom,age))
tkParent.message.config(text='À toi de jouer {0} !\nÉcris ta réponse dans la case en-dessous ⤵'.format(prenom))
# Puis fermeture de cette fenêtre pour laisser place à la fenêtre principale
tkParent.identification.destroy()
tkParent.deiconify()
def Onquit(self, event = None):
# Pour l'exemple. En fait la fermeture de tkParent.identification ici.
# Ce code est utile lors de la création d'interfaces avec de multiples toplevels par exemple.
for widget in tkParent.winfo_children():
if isinstance(widget,Toplevel):
widget.destroy()
tkParent.quit() |
Partager