Dazu habe ich lediglich mein spezifisches Frontend etwas angepasst und um die Option erweitert dass man beim Programmstart den Namen der Datei eingeben kann die geladen werden soll - dies ohne eine weitere Klasse zu eröffnen, siehe Code unten.
Code: Alles auswählen
......
def dateiladen():
global tabelle
global fenster
dateiname = eingabefeld.get()
if dateiname != "":
if dateiname[-3:] != "dmp":
dateiname = dateiname + ".dmp"
with open(dateiname, "rb") as inhalt:
tabelle = pickle.load(inhalt)
fenster.destroy()
tabelle = Tabelle(tabelle)
fenster = Fenster() # ???? ab hier wird der mainloop von main verlassen, ohne diesen wirklich zu beenden ????
# hier folgt später noch was um Falscheingaben abzufangen
def main():
global eingabefeld
global infolabel
global fenster
fenster = Tk()
infolabel=Label(master = fenster, text ="Bitte Dateiname eingeben")
infolabel.pack()
eingabefeld= Entry(master = fenster, width=25)
eingabefeld.pack()
button =Button(master = fenster, text ="o.k.", width=20, command = dateiladen)
button.pack()
beendenbutton=Button(master = fenster, text ="Beenden", width=20, command = beenden)
beendenbutton.pack()
mainloop()
if __name__ == '__main__':
main()
Wenn ich das Programm nun unter Win 7 mit starte läuft es tadellos und nach dem Beenden erscheint in der Konsole der übliche Text "None" und "Drücken sie eine beliebige Taste...". Unter Linux ist es dasselbe.
Durch Zufall bemerkte ich aber nun dass ich beim Beenden eine Fehlermeldung bekomme wenn ich das Programm per IDLE 'laufen' lasse (Bisher nur auf dem Win Rechner getestet, aber das wird bei Linux nicht anders sein)
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\Thomas\Desktop\dbnorm\trk_standard_frontend.py", line 508, in <module>
main()
File "C:\Users\Thomas\Desktop\dbnorm\trk_standard_frontend.py", line 505, in main
mainloop()
File "C:\Python30\lib\tkinter\__init__.py", line 323, in mainloop
_default_root.tk.mainloop(n)
File "C:\Python30\lib\tkinter\__init__.py", line 1407, in __call__
raise SystemExit(msg)
SystemExit: None
>>>
Einfach so ignorieren will ich das eigentlich nicht, auch wenn diese Fehlermeldung nur in der IDLE auftritt.
Wenn mein Verdacht stimmt und es an dem ersten mainloop liegt - wie kann diesen mainloop 'regelgerecht' verlassen ?
Thomas