jetz wollte ich das Programm "sauber" schreiben, also mit OOP und bin dabei auf folgendes Problem gestoßen:
ich will, dass der Taschenrechner ein Hauptfenster (root, bzw mainframe) hat, mit 5 Buttons oben (RUN, GRAPH, GEOM, PHYS) und dass, jenachdem, auf welchen button
man klickt unterhalb im "workframe" ein durch die Klasse "RUN", "GRAPH",... initialisierter/aufgerufener Bereich vergleichbar mit einem Fenster im Fenster aufgeht.
Code: Alles auswählen
from tkinter import Tk, Frame, Button, Text, Scrollbar, INSERT, NS, EW, StringVar
from sympy import *
class CALCULATOR:
def __init__(self, master):
self.master = master
master.title("CALCULATOR")
self.MENU = StringVar()
self.MENU.set("MATH")
self.mathButton = Button(master, text="MATH", command=self.MENU.set("MATH"))
self.graphButton = Button(master, text="GRAPH", command=self.MENU.set("GRAPH"))
self.geomButton = Button(master, text="GEOM", command=self.MENU.set("GEOM"))
self.physButton = Button(master, text="PHYS", command=self.MENU.set("PHYS"))
self.WFroot = Frame(master)
self.WFroot.pack()
#scenehandler
if self.MENU == "MATH":
self.workframe = MATH(self.WFroot)
elif self.MENU == "GRAPH":
#self.workframe = GRAPH(self.WFroot)
pass
elif self.MENU == "GEOM":
#self.workframe = GEOM(self.WFroot)
pass
elif self.MENU == "PHYS":
#self.workframe = PHYS(self.WFroot)
pass
else:
pass
class MATH:
def __init__(self, master):
#Widgets erstellen
self.master = master
self.cframe = Frame(root)
self.console = Text(self.cframe, height=10, width=50, bd=1)
self.scroll = Scrollbar(self.cframe, orient="vertical", command=self.console.yview)
#Widgets konfiurieren
self.console.tag_configure("tag_right", justify="right")
self.console.config(yscrollcommand=self.scroll.set)
self.console.bind('<KeyPress-Return>', self.EXE)
#Widgets visualisiren
self.console.grid(column=0, row=2)
self.console.focus()
self.scroll.grid(column=1,row=2, sticky=NS)
def EXE(self, event):
self.curr_line = int(self.console.index(INSERT).split(".")[0])
self.eingabe = self.console.get(str(self.curr_line)+".0", str(self.curr_line)+".end")
if len(self.eingabe) > 0:
if not self.eingabe[0].isalnum():
self.eingabe=str(self.console.get(str(self.curr_line-1)+".0", str(self.curr_line-1)+".end"))+self.eingabe
else:
self.eingabe = "0"
self.console.insert(str(self.curr_line)+".0", self.eingabe)
try:
self.ausgabe= str(eval(self.eingabe))
except:
self.ausgabe = "0"
self.console.delete(str(self.curr_line+1)+".0", str(self.curr_line+1)+".end") #vorheriges ergebnis löschen, falls vorhanden
self.console.insert(str(self.curr_line+1)+".0 -1c", "\n"+self.ausgabe, "tag_right") #neues ergebnis an diese stelle einfügen
self.console.delete(str(self.curr_line+2)+".0 -1c", str(self.curr_line+2)+".end")
self.console.delete("end -1c", "end")
self.console.mark_set("insert", "end")
root = Tk()
window = CALCULATOR(root)
root.mainloop()