# calculette 2 termes # prend en compte des clicks sur boutons # demo2 pour la 2eme seance from Tkinter import * # Les chaines constantes possibles pour la variable operateur STR_ADD = ' + ' STR_SOUSTR = ' - ' STR_MUL = ' * ' STR_DIV = ' / ' #variables globales nb1 = '' #une chaine vide au depart, un nombre ensuite nb2 = '' #une chaine vide au depart, un nombre ensuite operateur = '' #une chaine vide au depart, une chaine operateur ensuite egal = '' #une chaine vide au depart, ' = ' ensuite result = '' #une chaine vide au depart, un nombre ensuite calcul = '' #sera utilisee comme StringVar() comme variabletext d'un label #les fonctions def click_2(): #lorsqu'on click sur un chiffre global nb1, nb2, result if operateur == '': #l'operateur n'est pas introduit if nb1 == '': # -- ces 2 lignes seront utiles nb1 = 0 # -- plus tard nb1 = 2 calcul.set(str(nb1)) else: if nb2 == '': # -- ces 2 lignes seront utiles nb2 = 0 # -- plus tard nb2 = 2 calcul.set(str(nb1) + operateur + str(nb2)) def click_operateur(str_operateur): #lorsqu'on click sur un operateur global operateur if egal == '': #le calcul n'est pas fini if operateur == '' and nb1 != '': #l'operateur n'est pas introduit et nb1 existe operateur = str_operateur calcul.set(str(nb1) + operateur) def click(touche): #juste un exemple, a completer if touche == 0: print 0 elif touche == 1: print 1 def click_egal(): #lorsqu'on click sur egal global result, egal if nb2 != '': egal = ' = ' if operateur == STR_ADD: result = nb1 + nb2 else: result = 999 #a modifier bien sur calcul.set(str(nb1) + operateur + str(nb2) + egal + str(result)) def click_cancel(): #definir en global les variables globales qui seront modifiees #reinitialiser les variables et le calcul pass #completer #la routine qui prend en charge l'enfoncement d'une touche def gestion_touche_enfoncee(touche): print "repr(touche.char) : ", repr(touche.char), "touche.char : ", touche.char #affichages pour comprendre touche_str = touche.char if touche_str in ['0', '1']: click(int(touche_str)) #creation de la fenetre my_frame = Tk() my_frame.title("calculette 2 termes") my_frame.minsize(200, 200) #ecoute d'un enfoncement clavier my_frame.bind("", gestion_touche_enfoncee) #la 1ere ligne contient un label dont le texte est associe a la variable 'calcul' calcul = StringVar() Label(textvariable = calcul, height = 2).grid(row=0, column=0, columnspan=4, sticky=W) calcul.set('') #la 2eme ligne Button(text = STR_DIV, width = 3, command = lambda:click_operateur(STR_DIV)).grid(row=1, column=3) #la 3eme ligne Button(text = STR_MUL, width = 3, command = lambda:click_operateur(STR_MUL)).grid(row=2, column=3) #la 4eme ligne Button(text = ' ', width = 3).grid(row=3, column=0) Button(text = "2", width = 3, command = click_2).grid(row=3, column=1) Button(text = ' ', width = 3).grid(row=3, column=2) Button(text = STR_SOUSTR, width = 3, command = lambda:click_operateur(STR_SOUSTR)).grid(row=3, column=3) #la derniere ligne Button(text = ' ', width = 3).grid(row=4, column=0) Button(text = STR_ADD, width = 3, command = lambda:click_operateur(STR_ADD)).grid(row=4, column=3) Button(text = " = ", width = 20, command = click_egal).grid(row=5, column=0, columnspan=4) #la phase d'attente d'un evenement my_frame.mainloop()