Seite 1 von 1

Tkinter Fenster nach Funktion schließen

Verfasst: Samstag 8. Februar 2020, 18:33
von Qnicci
Hallo
Ich suche eine Lösung um Tkinter/Python zu sagen das er das Fenster nach der Funktion schlißen soll.
Die Funktion ist noch ein Python Programm auszuführen
Bin noch ein neuling in Tkinter

Ein Bild mit Source CODE
Bild

Re: Tkinter Fenster nach Funktion schließen

Verfasst: Samstag 8. Februar 2020, 18:36
von __deets__
Das macht man so nicht. Zum einen benutzt man os.system nicht mehr, und das ist seit fast 20 Jahren auch schon so in der Dokumentation beschrieben. Und zum anderen programmierst du ja schon in Python, es gibt also keinen Grund, zB VW.py als externes Programm zu starten. Sondern den Code darin kannst du auch direkt ausfuehren. Und damit dann zB auch ein Fenster per Knopfdruck oder aehnlichem schliessen.

Re: Tkinter Fenster nach Funktion schließen

Verfasst: Samstag 8. Februar 2020, 20:27
von __blackjack__
@Qnicci: Quelltext hier bitte nicht als Bild zeigen sondern als Text in den Beitrag einfügen und in code-Tags setzen. Das ist im Beitragseditor die Schaltfläche mit der Beschriftung „</>“.

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Sternchen-Importe sind Böse™. Gerade bei `tkinter` holt man sich da hunderte von Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). `Ford` ist also für eine Funktion falsch geschrieben. `ford` wäre zwar formal richtig, aber inhaltlich keine gute Beschreibung für eine Funktion, denn die werden normalerweise nach der Tätigkeit benannt die sie ausführen. `ford` ist aber keine Tätigkeit.

Man nummieriert Namen nicht durch. Da will man sich entweder bessere Namen ausdenken, oder gar keine einzelnen Namen sondern die Werte in eine Datenstruktur zusammenfassen. Oft eine Liste. Bei den Namen in diesem Fall will man aber einfach gar keine Namen verwenden, denn die werden ja nicht mehr gebraucht.

Das die Automarken-Module jeweils in einem Verzeichnis stecken das noch mal den gleichen Namen wie das Modul hat, ist komisch bis falsch. Das sollten einfach Packages sein wenn man pro Automarke mehr als ein Modul hat.

Die Fenstergrösse sollte man nicht vorgeben, die ergibt sich ja schon automatisch aus dem Fensterinhalt.

Anwendungen die aus mehr als einem Modul bestehen sollte man in einem Package zusammenfassen.

Beispiel:

Code: Alles auswählen

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

from package_name.car_models import chrysler, ford, volkswagen


def main():
    root = tk.Tk()
    root.title("CanHackTool - Marke")

    tk.Label("Wähle Marke").pack()
    for name, module in [
        ("Ford", ford),
        ("Chrysler", chrysler),
        ("VW", volkswagen),
    ]:
        tk.Button(root, text=name, command=module.main).pack()
    
    root.mainloop()


if __name__ == "__main__":
    main()