123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- from Tkinter import *
- from tkMessageBox import showinfo
- #Verwendet Module,Tkinter zur Erstellung vom Taschenrechner,showinfo Fehler abzufangen
- #----------------------------------
- #Erstellung eines Taschenrechners
- def UPN():
- root.title('umgekehrte polnische Notation')
- root.geometry('310x440+200+100')#Die Groesse
- UI = LabelFrame(root)
- UI.place(x = 1,y = 1,width = 308,height = 124)
- UPN.text = Text(UI)#Das Fenster zur Ausgabe
- UPN.text.place(x=1,y=1,width=300,height=116)
- Li=[['7','8','9','+','DEL'],
- ['4','5','6','-','Enter'],
- ['1','2','3','*','='],
- ['0','/','Clear','','']]
- #Erstellung der Tasten mit Hilfe von Schleife
- for i in range(len(Li[0])):
- for j in range(len(Li)):
- bts = Li[j][i]
- if bts:
- bt = Button(root)
- bt.place(x=i*60+10,y=120+(j+1)*60,width=50,height=50)
- bt['text'] = bts
- bt.bind('<Button-1>',response,add=(root,))
- #----------------------------------
- def response(event):
- I = event.widget['text']#Die Zeichnen auf der gedrueckten Taste zu bekommen
-
- texts = UPN.text.get(1.0,END+'-1c')#Die Inhalte vom Text zu bekommen
- #print texts
- if I == 'DEL':
- UPN.text.delete(INSERT + '-1c',INSERT)
- elif I == 'Clear':
- UPN.text.delete(1.0,END)
- elif I == 'Enter':
- UPN.text.insert(INSERT,'\n')
- elif I == '=':
- try:
- s = toList(texts)
- #print s
- UPN.text.insert(END,'\n=\n')
- UPN.text.insert(END,Stack(s))#Das Ergebnis abzugebn
- UPN.text.see('end')
- except:
- showinfo('Achtung:', 'Falsche Eingabe,bitte ueberpruefen Sie die Eingabe!')
- else:
- UPN.text.insert(INSERT,I)
- UPN.text.focus()#Cursor auf der Taste
- #----------------------------------
- def toList(text):
- #Die mit Zeilenvorschubzeichen Zeichenkette zu List umwandeln
- a = text.splitlines()
- L = []
- for i in a:
- s = ""
- z = True
- for j in i:
- #print
- if j not in '+-*/':
- s += j
- z = True
- else:
- if s:
- L.append(s)
- if j:
- L.append(j)
- s = ""
- z = False
- if i[-1] in '+-*/':
- if z and j:
- L.append(j)
- else:
- if z and s:
- L.append(s)
- return L
- def Stack(s,S = None,i = 0):
- #Definition von Stack
- if not S:
- S = []
-
- if i == len(s):
- return S[0]
- a = s[i]#Das Element wird nacheinander ausgenommen
- if a.isdigit():#Ob es nur aus Zahlen besteht
- S.append(a)
- return Stack(s, S, i+1)
- else:
- c = S.pop()
- d = S.pop()
-
- S.append(Grundrechenarten(d,a,c))#rechnen und einfuellen
- return Stack(s, S, i+1)
- def Grundrechenarten(c,a,d):
- if a == '+':
- result = float(c)+float(d)
- elif a == '-':
- result = float(c)-float(d)
- elif a == '*':
- result = float(c)*float(d)
- elif a == '/':
- result = float(c)/float(d)
- if result == int(result):
- result = int(result)
- return result
- #----------------------------------
- def main():
- UPN()
- root.mainloop()
- #main-Funktion
- if __name__ == '__main__':
- print 'Dieses Programm ist ein Taschenrechner mit UPN-Eingabe.Es verwendet man zur Rechnung der Grundechenarten.'
- print 'Programmierer: Zhu,Hongrui'
- print ' Hu,Fangyu'
- print ' Chen,Siyi'
- root = Tk()
- main()
|