#! /usr/bin/python

# BRUCHRECHNUNG - Einführung in objektorientiertes Programmieren
# TEIL - Datei : teil_guitest.py
#	Autor: Bombei, Juni 2002, F-Ebert-Oberschule

import Tkinter
from Tkconstants   import  *

class xBruch:
   """
   /* GUI-Darstellung eines Bruches
   """
   def __init__(self,win):
      """
      /* Zwei Eingabefelder werden übereinander angeordnet (Zähler,Nenner).
      /* Links daneben jeweils eine Beschriftung  .
      /* win kennzeichnet das Parent-Objekt, in das der Bruch gesetzt wird.
      """
      RaLinks   = Tkinter.Frame(win)
      RaLinks.pack(side=LEFT)
      RaRechts  = Tkinter.Frame(win)
      RaRechts.pack(side=LEFT)
      LaZaehler = Tkinter.Label(RaLinks, text= "Z ")
      LaZaehler.pack()
      LaNenner = Tkinter.Label(RaLinks, text= "N ")
      LaNenner.pack()
      self.zaehler=Tkinter.Entry(RaRechts, width=5)
      self.zaehler.pack(padx=4, pady=4)
      self.nenner=Tkinter.Entry(RaRechts, width=5)
      self.nenner.pack(padx=4, pady=4)


class xZahl:
   """
   /* GUI-Darstellung einer Zahleneingabe bzw. -ausgabe
   """
   def __init__(self,win):
      """
      /* Ein Zahlen-Eingabefeld wird angelegt
      /* win kennzeichnet das Parent-Objekt, in das die Zahl gesetzt wird.
      """
      zWert=Tkinter.StringVar()
      self.zahl=Tkinter.Entry(win,textvariable=zWert, width=5)
      self.zahl.pack(padx=4, pady=4)


class xTaste:
   """
   /* GUI-Darstellung einer Taste
   """
   def __init__(self, win, Text, Bef, Seite=TOP):
      """
      /* win kennzeichnet das Parent-Objekt, in das die Taste gesetzt wird.
      /* Text : string : Beschriftung der Taste
      /* Bef  : Methodenreferenz : Methode, die beim Drücken der Taste
      /*                           ausgeführt werden soll.
      /* Seite: option. Parameter, um Tasten auch nebeneinander anordnen zu können
      """
      Knopf=Tkinter.Button(win, text=Text, command=Bef)
      Knopf.pack(side=Seite, padx=4, pady=4, fill=X, expand=1)

class xRahmen6:
   """
   /* GUI-Darstellung der TEST Rahmen
   """
   def __init__(self):
      """
      /* Bei der Objekterzeugung wird ein Fenster geöffnet
      /* Rechner: Referenz auf ein Objekt der Klasse Dia_Bruch
      """

      # Hauptfenster erstellen:
      dasFenster=Tkinter.Tk()
      dasFenster.geometry("+100+50")
      dasFenster.title("Rahmentest 6")

      #Grobe Rahmenstruktur:
      RahmenOben=Tkinter.Frame(dasFenster, bd=2)
      RahmenOben.pack(padx=4, pady=4)
      RahmenMitte=Tkinter.Frame(dasFenster, bd=2)
      RahmenMitte.pack(padx=4, pady=4)
      RahmenUnten=Tkinter.Frame(dasFenster, bd=2)
      RahmenUnten.pack(side=LEFT, padx=4, pady=4, fill=X, expand=1)
      RahmenGanzUnten=Tkinter.Frame(dasFenster, bd=2)
      RahmenGanzUnten.pack(side=LEFT, padx=4, pady=4)

      # Unterteilende Rahmen, jeweils mit Beschriftung:
      RahmenBr1 = Tkinter.Frame(RahmenOben, relief=SUNKEN, bd=2)
      RahmenBr1.pack(side=TOP, padx=4, pady=6, fill=Y, expand=1)
      RBr1Text  = Tkinter.Label(RahmenBr1,text=" Eingabe Bruch 1 ")
      RBr1Text.pack()

      RahmenErg=Tkinter.Frame(RahmenOben, relief=SUNKEN, bd=2)
      RahmenErg.pack(side=TOP, padx=4, pady=6)
      RErgText = Tkinter.Label(RahmenErg,text=" Ergebnis ")
      RErgText.pack()
      RahmenBrEr=Tkinter.Frame(RahmenErg, relief=RIDGE, bd=2)
      RahmenBrEr.pack(padx=4, pady=6)

      RahmenDez=Tkinter.Frame(RahmenErg, relief=RIDGE, bd=2)
      RahmenDez.pack(padx=4, pady=6)
      RDezText = Tkinter.Label(RahmenDez,text=" Dezimal ")
      RDezText.pack(side=LEFT, pady=6)

      RahmenMona=Tkinter.Frame(RahmenMitte, relief=RIDGE, bd=2)
      RahmenMona.pack(padx=4, pady=6)
      RMonaText = Tkinter.Label(RahmenMona,text=" Unäre Operationen ")
      RMonaText.pack()
      RahmenUnOp=Tkinter.Frame(RahmenMona)
      RahmenUnOp.pack(side=LEFT, padx=4, pady=6)

      RahmenUnEing=Tkinter.Frame(RahmenMona, relief=SUNKEN, bd=2)
      RahmenUnEing.pack(side=LEFT, padx=4, pady=6)
      REingText = Tkinter.Label(RahmenUnEing,text=" Eingabe Zahl ")
      REingText.pack()

      RahmenDiad=Tkinter.Frame(RahmenUnten, relief=RIDGE, bd=2)
      RahmenDiad.pack(padx=4, pady=6, fill=X, expand=1)
      RDiadText = Tkinter.Label(RahmenDiad,text=" Binäre Operationen ")
      RDiadText.pack()
      RahmenBinOp=Tkinter.Frame(RahmenDiad, bd=2)
      RahmenBinOp.pack(side=LEFT, padx=4, pady=6)

      RahmenBr2=Tkinter.Frame(RahmenDiad, relief=SUNKEN, bd=2)
      RahmenBr2.pack(side=LEFT, padx=4, pady=6, fill=Y, expand=1)
      RBr2Text = Tkinter.Label(RahmenBr2,text=" Eingabe Bruch 2 ")
      RBr2Text.pack()

      # Ein- und Ausgabefelder:
      self.Br1=xBruch(RahmenBr1)
      self.Br2=xBruch(RahmenBr2)
      self.Zahl =xZahl(RahmenUnEing)
      self.BrEr=xBruch(RahmenBrEr)
      self.Dezi =xZahl(RahmenDez)

      # Aktionstasten:
      KKurz=xTaste(RahmenUnOp,' kürzen so weit...',self.kuerzen)

      KPlus=xTaste(RahmenBinOp,' + ',self.addieren, "left")

      KEnde=xTaste(RahmenGanzUnten,' E N D E ', dasFenster.destroy, "left")


   def kuerzen(self):
      """
      /* Methode, die beim Drücken der Kürzen-Taste aufgerufen wird
      """
      pass

   def addieren(self):
      """
      /* Methode, die beim Drücken der Plus-Taste aufgerufen wird
      """
      pass

   def leeren(self):
      """
      /* Methode, die beim Drücken der Zurücksetzen-Taste aufgerufen wird
      """
      self.Br1.set_xZaehler("")
      self.Br1.set_xNenner("")
      self.Br2.set_xZaehler("")
      self.Br2.set_xNenner("")
      self.BrEr.set_xZaehler("")
      self.BrEr.set_xNenner("")
      self.Zahl.set_xZahl("")
      self.Dezi.set_xZahl("")


if __name__ == "__main__":
   meinWindow=xRahmen6()
   Tkinter.mainloop()
