"Close"-Button Event zur Änderung einer Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Woodz
User
Beiträge: 16
Registriert: Sonntag 11. Dezember 2016, 18:32

Hallo Mädels und Jungs,

ich schreibe gerade an einer Applikation in der mittels tkinter ein Main-Fenster gestartet wird. Bei Betätigung eines Buttons wird ein Toplevel-Fenster geöffnet. Nun möchte ich, dass es aber nur geöffnet wird, wenn es nicht schon offen ist.

Ok das Problem habe ich mit einer globalen Statusvariablen gelöst was auch soweit funktioniert.

Nun habe ich aber das Problem, dass wenn der User den "close"-Button (X) betätigt, ich nicht weiß wie ich dieses Ereignis nutzen kann um den Status der Variablen zu ändern.

Ich schicke Euch mal den Code zur Prozedur, die den Status des Fensters abfragt und ggf. das Fenster neu erstellt.

Code: Alles auswählen


def Toplevelfenster():
    global Fenster_Status
    if Fenster_Status != "aktiv":
        Fenster = Toplevel(Main_Window)
        Fenster.title("Titel")
        Fenster.geometry("800x600")
        Fenster_Status = "aktiv"
    else:
        pass
 
Beste Grüße,
Woodz :?
Zuletzt geändert von Anonymous am Freitag 10. März 2017, 10:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Woodz: Das X beziehungsweise das Schliessen des Fensters allgemein kann man über das WM_DELETE_WINDOW-Protokoll mitbekommen: http://effbot.org/tkinterbook/tkinter-e ... #protocols

Den Umweg über eine zusätzliche Variable, und dann auch noch eine Zeichenkette für etwas das eigentlich ein Wahrheitswert ist, würde ich mir sparen. Nimm einfach das `Toplevel`-Objekt selbst und `None` als Werte.

Das ``global`` sollte da nicht sein. Dieses Schlüsselwort hat in sauberen Programmen nichts zu suchen, und da man bei GUIs sowieso objektorientiert arbeiten muss, gibt es auch keinen Grund auf solche Hacks zurückzugreifen.


Ein ``if``- oder ``else``-Zweig der nur aus einem ``pass`` besteht macht keinen Sinn.

Die Namenschreibweise hält sich nicht an die Konventionen und inhaltlich ist der Funktionsname auch ungünstig gewählt. Funktionen und Methoden werden üblicherweise nach den Tätigkeiten benannt die sie durchführen, damit der Leser weiss was da passiert und um sie von eher passiven Werten unterscheiden zu können. Bei dem Namen `Toplevelfenster` erwarten die meisten ein Objekt das ein Toplevel-Fenster repräsentiert, beziehungsweise in *der* Schreibweise eigentlich sogar keine Klasse, und keine Funktion die eines erstellt.
Woodz
User
Beiträge: 16
Registriert: Sonntag 11. Dezember 2016, 18:32

Wow. Ich danke Dir! Auch für die weiteren Hinweise.

Grüße
Antworten