Anwendungsbeispiel für das Datei-Auswahlfenster

Dr. Bernd Kokavecz, 30.10.2000
Das Programm demonstriert den Aufbau eines Pull-Down-Menüs und die Verwendung meines Dateiauswahlfensters! (klick: Bildschirmphoto)

#!/usr/bin/python

from Tkconstants import *
import os
import string
import sys
from datwahlfenster import *
from meldung import *

class BenutzerInterface:
   """
   /* Erzeugt ein Fenster auf dem Bildschirm mit Pull-Down-Menue
   """
   def __init__(self):
     """
     * Initialisierung
     """
     self.eineDateiauswahl=None   # Referenz auf Dateiauswahl
     self.tk=Tkinter.Tk()  # s. Tk-Inter
     self.__Fenster_zeigen()
     self.__Menu_zeigen()
     self.datei=""    # aktuell ausgewählte Datei : keine
     self.verz=os.getcwd()  # aktuelles Verzeichnis holen
     self.demoObj=[1,2,3] # das ist mein zu speicherndes Objekt  # demo-Objekt

   def __Fenster_zeigen(self):
     """
     /* interne Methode, Verfeinerung, spricht für sich selbst
     """
     Fensterbreite=str(450)
     Fensterhoehe=str(350)
     geometrie=Fensterbreite+"x"+Fensterhoehe+"+0+0"
     self.tk.geometry(geometrie)
     self.tk.title("Beispiel für die Anwendung des Dateiwahlfensters")

   def __Menu_zeigen(self):
     """
     /* interne Methode: Generierung des Pull-Down-Menues
     """
     zeile=Tkinter.Frame(self.tk,relief=RAISED, bd=2)
     zeile.pack(side=TOP, fill=X)
     fileButton=Tkinter.Menubutton(zeile,text="  Datei  ",underline=2)
     fileButton.pack(side=LEFT)
     DateiMenu=Tkinter.Menu(fileButton)
     DateiMenu.add_command(label="Neu", command=self.neu)      
     DateiMenu.add_command(label="Öffnen", command=self.oeffnen)
     DateiMenu.add_separator()                                                  
     DateiMenu.add_command(label="speichern", command=self.speichern)
     DateiMenu.add_command(label="speichern als ...",command=self.speichern_als)
     DateiMenu.add_separator()
     DateiMenu.add_command(label="Ende", command="exit")
     fileButton["menu"]=DateiMenu

   def neu(self): 
     """
     /* neues demo-Objekt erzeugen
     """
     del self.demoObj
     self.demoObj=[]
     print self.demoObj   #  demo

   def __hole(self):   
     """
     /* Beispiel für interne Lesemethode
     """
     self.verz=self.eineDateiauswahl.get_dir() 
     self.datei=self.eineDateiauswahl.get_datei()
     fname=self.verz+os.sep+self.datei  # akt. Dateiname
     try:
        f=open(fname,"r")
        objekt=pickle.load(f)
        f.close()
        self.demoObj=objekt
        self.eineDateiauswahl.set_fertig()
     except:
        meldung=Meldung("Datei oder Verzeichnis nicht gefunden!")
        self.eineDateiauswahl.set_datei=""
     print self.demoObj   #  demo
                                       
   def oeffnen(self):
     """
     /* Objekterzeugung: Fachkonzept und GUI Dateiauswahl
     """
     self.eineDateiauswahl=DV_Auswahl(self.__hole,"*.list") 
     einDateiauswahlFenster=DV_Auswahl_GUI("   öffnen   ",self.eineDateiauswahl)
     # GUI kennt Fachkonzept (self.eineDateiauswahl)

   def speichern(self):
     """
     /* falls noch keine Dateiauswahl erfolgte: speichern_als!
     """
     if self.eineDateiauswahl != None:
         self.datei=self.eineDateiauswahl.get_datei()
         self.verz=self.eineDateiauswahl.get_dir()
     if self.datei=="":
         self.speichern_als()
     else:
         try:
            fname=self.verz+os.sep+self.datei
            f=open(fname,"w")
            pickle.dump(self.demoObj,f)
            f.close()                     
            self.eineDateiauswahl.set_fertig()
            print self.demoObj   #  demo
         except:
            meldung=Meldung("Schreibfehler! Keine Berechtigung!")
            self.eineDateiauswahl.set_datei=""

   def speichern_als(self):
       """
       /* Objekterzeugung: Fachkonzept und GUI Dateiauswahl
       """
       self.eineDateiauswahl=DV_Auswahl(self.__speichern2,"*.list") 
                                                   # Schreibmethode übergeben
       einDateiauswahlFenster=DV_Auswahl_GUI("  speichern  " \
                                                      ,self.eineDateiauswahl)
       # Das Fachkonzept muss dem GUI bekannt sein

   def __speichern2(self): 
       """
       /* Beispiel für interne Schreibmethode
       """
       self.datei=self.eineDateiauswahl.get_dir()
       self.verz=self.eineDateiauswahl.get_datei()
       fname=self.datei+os.sep+self.verz  # Dateiname
       try:
          f=open(fname,"w")
          pickle.dump(self.demoObj,f)
          f.close()                                                         
          self.eineDateiauswahl.set_fertig()
          print self.demoObj   #  demo
       except:
          meldung=Meldung("Schreibfehler! Keine Berechtigung!")
          self.eineDateiauswahl.set_datei=""


#--------------------------   Hauptprogramm  ---------------------------

MeinBildschirm=BenutzerInterface()
Tkinter.mainloop() 

zurück

Dr. Bernd Kokavecz
30.10.2000