tkinter Fenster schliessen geht nicht

Fragen zu Tkinter.
Antworten
Segelbär
User
Beiträge: 9
Registriert: Dienstag 31. Dezember 2019, 09:21

Hallo Zusammen,

bei mir schliesst das Haupt-Fenster (die eigentliche Python-Anwendung) mit object.destroy() nicht. Das Unterfenster (von def open_window(self):) schliesst wieder, was sich auch wiederholen lässt. Das Hauptfenster reagiert nach dem destroy Befehl nicht mehr bleibt aber offen: Habe das auch mit Code aus einem anderen Forumbeitrag, der als Lösung eingestellt war probiert:

Code: Alles auswählen

#!/usr/bin/python3
import tkinter as tk

class Mainwindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('root Fenster')
        self.window = None
        tk.Label(self, text="--> root <--").pack()
        tk.Button(self, text='Beenden', command=self.destroy).pack()
        tk.Button(self, text='w öffnen', command=self.open_window).pack()
        tk.Button(self, text='w beenden', command=self.close_window).pack()

    def close_window(self):
        self.window.destroy()

    def open_window(self):
        self.window = tk.Toplevel(self)
        tk.Label(self.window, text="--> w <--").pack()
        

def open_root():
    root = Mainwindow()
    root.mainloop()
    
if __name__ == '__main__': 
    open_root()
Wenn ich die Python Shell schliesse ist das Python Fenster mit dem Anwendungsfenster auch geschlossen. Solange die Shell offen ist kann ich das Anwendungsfenster nicht schliessen. Wenn ich BEENDEN klicke, verschwindet das Anwendungsfenster, nach Wechsel auf eine andere APP (z.B. Safari) und zurück auf "Python" ist das Anwedungsfenster wieder da, reagiert aber nicht mehr und der Beenden Button ist blau hinterlegt. Die App Python kann ich gar nicht mit cmd+Q schliessen. Nur durch schliessen der Shell.

Wie kann ich das Anwendungsfenster mit Code schliessen?
Python 3.8.1, tkinter 8.6.8, IDLE 3.8.1 auf MacOS 10.13.16

Bild
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du darfst den Code nicht aus IDLE heraus ausführen. Das ist selbst in Tk implementiert & damit kommen sich IDE und dein Skript in die Quere. Bei GUI Entwicklung IMMER per Shell starten.
Segelbär
User
Beiträge: 9
Registriert: Dienstag 31. Dezember 2019, 09:21

Danke _deets_ für die schnelle Antwort,

meinst du aus der IDLE Shell oder aus einen MacOS Terminal?

Gruß
Sven
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Aus dem Terminal heraus.
Segelbär
User
Beiträge: 9
Registriert: Dienstag 31. Dezember 2019, 09:21

Danke!!
Antworten