Seite 1 von 1

"Close"-Button Event zur Änderung einer Variablen

Verfasst: Freitag 10. März 2017, 09:37
von Woodz
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 :?

Re: "Close"-Button Event zur Änderung einer Variablen

Verfasst: Freitag 10. März 2017, 11:10
von 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.

Re: "Close"-Button Event zur Änderung einer Variablen

Verfasst: Freitag 10. März 2017, 11:57
von Woodz
Wow. Ich danke Dir! Auch für die weiteren Hinweise.

Grüße