from tkinter import * import pickle # Serialisierung von Objekten zur Speicherung class Benutzer(object): def __init__(self, Name, Vorname, GebDat): self.Name = Name self.Vorname = Vorname self.GebDat = GebDat class Speicher(object): def __init__(self): self.dateiname = "gbuch.bin" print('Datei ', self.dateiname, ' geöffnet.') try: self.datei = open(self.dateiname, 'r+b') except IOError: # Datei existiert noch nicht --> Neuanlage self.datei = open(self.dateiname, 'wb') self.datei.close() self.datei = open(self.dateiname, 'r+b') def Ende(self): print('Datei ', self.dateiname, ' geschlossen.') if self.datei: self.datei.close() def LeseDatensatz(self): try: gelesen = pickle.load(self.datei) except Exception as e: # Datensatz nicht gefunden gelesen = Benutzer("","","") return gelesen def SpringeAnfang(self): self.datei.seek(0) def SchreibeDatensatz(self,neuerBenutzer): self.datei.seek(0,2) # Sprung an das Dateiende pickle.dump(neuerBenutzer, self.datei) self.datei.flush() def Button_Weiter_Click(): gelesen = meinSpeicher.LeseDatensatz() entryName.delete(0,END) entryName.insert(0,gelesen.Name) entryVorname.delete(0,END) entryVorname.insert(0,gelesen.Vorname) entryGebDat.delete(0,END) entryGebDat.insert(0,gelesen.GebDat) def Button_Anfang_Click(): meinSpeicher.SpringeAnfang() Button_Weiter_Click() def Button_Speichern_Click(): Name = entryName.get() Vorname = entryVorname.get() GebDat = entryGebDat.get() neuerBenutzer = Benutzer(Name, Vorname, GebDat) meinSpeicher.SchreibeDatensatz(neuerBenutzer) entryName.delete(0,END) entryVorname.delete(0,END) entryGebDat.delete(0,END) def winexit(): meinSpeicher.Ende() tkFenster.destroy() tkFenster.quit() # Erzeugung des Fensters tkFenster = Tk() tkFenster.title("GBuch") tkFenster.geometry("270x160") tkFenster.protocol("WM_DELETE_WINDOW", winexit) # Exit wenn x gedrückt # Rahmen Daten frameDaten = Frame(master=tkFenster, \ background="#A0DAB3") frameDaten.place(x=10, y=10, width=250, height=100) labelName = Label(master=frameDaten, \ text="Name", \ background="#A0DAB3", \ anchor=W) labelName.place(x=5, y=5, width=100, height=20) entryName = Entry(master=frameDaten, \ background="white") entryName.place(x=100, y=5, width=100, height=20) labelVorname = Label(master=frameDaten, \ text="Vorname", \ background="#A0DAB3", \ anchor=W) labelVorname.place(x=5, y=35, width=100, height=20) entryVorname = Entry(master=frameDaten, \ background="white") entryVorname.place(x=100, y=35, width=100, height=20) labelGebDat = Label(master=frameDaten, \ text="GebDat", \ background="#A0DAB3", \ anchor=W) labelGebDat.place(x=5, y=65, width=100, height=20) entryGebDat = Entry(master=frameDaten, \ background="white") entryGebDat.place(x=100, y=65, width=100, height=20) # Rahmen Buttons frameButtons = Frame(master=tkFenster, \ background="#FFDA5D") frameButtons.place(x=10, y=120, width=250, height=30) buttonAnfang = Button(master=frameButtons, \ text="Anfang", \ command=Button_Anfang_Click) buttonAnfang.place(x=5, y=5, width=50, height=20) buttonWeiter = Button(master=frameButtons, \ text="weiter", \ command=Button_Weiter_Click) buttonWeiter.place(x=60, y=5, width=50, height=20) buttonSpeichern = Button(master=frameButtons, \ text="Datensatz speichern", \ command=Button_Speichern_Click) buttonSpeichern.place(x=120, y=5, width=120, height=20) # Aktivierung des Fensters meinSpeicher = Speicher() tkFenster.mainloop()