from Pile import Pile_lst from tkinter import * class Expression: def __init__(self, valeur, gauche, droite): self.valeur = valeur self.gauche = gauche self.droite = droite def evalue(self): """Renvoie la valeur de l'expression""" if self.valeur == '+': return self.gauche.evalue() + self.droite.evalue() elif self.valeur == '*': return self.gauche.evalue() * self.droite.evalue() elif self.valeur == '-': return self.gauche.evalue() - self.droite.evalue() elif self.valeur == '/': return self.gauche.evalue() / self.droite.evalue() else: return self.valeur def __str__(self): if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and self.valeur != '/': return self.valeur elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/': return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" def npi2tree(exp): """Prends en paramètre une ... correspondant à l'expression en notation polonaise inversée et renvoie l'arbre correspondant""" pile_npi = Pile_lst() lst_npi = exp.split() for element in lst_npi: if element == '+' or element == '*' or element == '-' or element == '/': exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) pile_npi.empiler(exp_npi) else: exp_feuille = Expression(int(element), None, None) pile_npi.empiler(exp_feuille) return pile_npi.sommet() #------------------------------------------- #Tkinter #------------------------------------------- fenetre = Tk() #def enregistrer(): # expr = zonetexte.get() # affichage = npi2tree(expr) # texte2.configure(text=affichage) def resultat(): expr = zonetexte.get() res = npi2tree(expr).evalue() texte2.configure(text=res) affichage = npi2tree(expr) texte4.configure(text=affichage) zonetexte = Entry(fenetre, width=30) zonetexte.pack() texte1 = Label(fenetre,text="Résultat:") texte1.pack() texte2 = Label(fenetre,text="???") texte2.pack() texte3 = Label(fenetre,text="Expression:") texte3.pack() texte4 = Label(fenetre,text="???") texte4.pack() enregistrer=Button(fenetre, text="Résultat", command=resultat) enregistrer.pack()