mehrere Fenster beenden

Fragen zu Tkinter.
Antworten
jbaben
User
Beiträge: 24
Registriert: Dienstag 12. Januar 2016, 16:05

Hallo,
ich habe ein Problem mit dem beenden mehrere geöffnete Fenster in meiner Anwendung.
Also ich habe ein Hauptfenster von wo aus ich mehrere Fenster öffnen kann (Anmelde-Fenster - Service-Fenster - Service-Funktion)
Die einzelen Fenster kann ich mit dem entsprechenden Button im Fenster beenden.
Aber wie kann ich alle geöffneten Fenster über den Beenden-Button im Haupt-Fenster beenden ?
Hier noch einige Infos zu meiner Anwendung:

Code: Alles auswählen

from tkinter import *
class MyApp(
	windows = list()
	def __init__(self, root, geometry, title):
        Toplevel.__init__(self)

        self.geometry('%dx%d+%d+%d' % geometry)
        self.title(title)
Anmelde-Fenster

Code: Alles auswählen

def anmelden(self):
            # Fenster Anmeldung öffnen
            self.FensterAn = Toplevel()
            self.FensterAn.title('Anmeldung')
            self.FensterAn.geometry('250x200')
            # Label Benutzer Anmeldung
            self.labelBenutzer = Label(self.FensterAn,  text='Benutzer')
            self.labelBenutzer.place(x=10, y=30, width=50, height=20)
            # Label Benutzer Kennwort
            self.labelKennwort = Label(self.FensterAn,  text='Kennwort')
            self.labelKennwort.place(x=10, y=60, width=50, height=20)
            # Eingabe Benutzer
            benutzer = Entry(self.FensterAn, bd =5,textvariable = self.Benutzer)
            benutzer.place(x= 100, y=30)
            # Eingabe Kennwort
            kennwort = Entry(self.FensterAn, bd =5,textvariable = self.Kennwort)
            kennwort.place(x= 100, y=60)
            # Button zum Schließen des Fensters
            self.buttonAn = Button(self.FensterAn, text='Anmelden',
                          command=self.anmeldung)
            self.buttonAn.place(x=40, y=160, width=100, height=20)
so beende ich das Anmelde-Fenster und rufe das nächste Fenster auf

Code: Alles auswählen

def anmeldung(self):
        # Abfrage ob Kennwort Richtig
        if self.Kennwort.get() == "1234":
            self.Kennwort.set("")
            self.service()              #  Fenster Service
        self.FensterAn.quit()
        self.FensterAn.destroy()
wenn ich das Anmelde-Fenster über den Button im Hauptfenster mit:

Code: Alles auswählen

def close_fenster(self): 
        self.quit()				# Haupt-Fenster
        self.destroy()			# Haupt-Fenster
        self.FensterAn.quit()		# Anmelde-Fenster
        FensterAn.destroy()		# Anmelde-Fenster
        self.FensterService.quit()	# Service-Fenster
        self.FensterService.destroy()
erhalte ich die Fehlermeldung:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\Python35\lib\tkinter\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "J:\MeineProgramme\Python\Windows\Beispiele aus dem Internet\sz_01.py", line 329, in close_fenster
    FensterAn.quit()
NameError: name 'FensterAn' is not defined
MfG

Juergen B.
:?:
BlackJack

@jbaben: Einfach auf dem Hauptfenster `quit()` aufrufen sollte genügen. Alles danach ist überflüssig, weil mit dem `quit()` die `mainloop()` verlassen wird, und danach dann Dein Programm enden sollte.
jbaben
User
Beiträge: 24
Registriert: Dienstag 12. Januar 2016, 16:05

Hallo,

vielen Dank für die schnelle Antwort.
Der Hinweis auf nur "quit()" hat funktioniert.
Ab und zu ist weniger mehr.

MfG

Juergen B.
:D
Antworten