mainloop Fehlermeldung
Verfasst: Montag 2. September 2013, 00:31
Für mein Tabellenprojekt habe ich nun ein Standard GUI Frontend erstellt, also eines mit dem ich jede zweidimensionale Liste öffnen kann.
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.
Das funktioniert soweit auch, muss nur zusehen ob und wie ich diese Globalen Variablen noch beseitigen kann, die wurden jetzt mal auf die "Schnelle" deklariert damit das Programm so überhaupt läuft.
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)
Ich vermute mal dass das damit zusammenhängt dass ich den mainloop() in obigem Listning (4.letzte Zeile) eigentlich nicht so richtig verlasse. Ein zweiter mainloop befindet sich am Ende der __init__ der 'class Fenster' aus der heraus das Programm per quit() beendet wird.
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
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