Grob gesagt, der ursprüngliche Code versucht, eine Pseudo-MVC (Modell, Ansicht und Controller) Architektur zu verwenden. Obwohl es keinen "Modell" -Teil gab, gab es nur eine "Ansicht" (einige Frames) und einen "Controller" (die Hauptanwendung). Daher der Verweis auf ein Controller-Objekt. Der ursprüngliche Code wurde tatsächlich geschrieben, um zu zeigen, wie Frames zu "stapeln" sind, daher ist die MVC-Implementierung sehr flach und zu wenig dokumentiert, da dies nicht der Sinn des Beispiels war.
Ihre spezifische Fragen zu beantworten:
Selbst das aktuelle Objekt darstellt. Dies ist ein allgemeiner erster Parameter für jede Methode einer Klasse. Wie Sie vorgeschlagen haben, ist es vergleichbar mit Javas dieser.
Das übergeordnete Element repräsentiert ein Widget, das als übergeordnetes Objekt des aktuellen Objekts fungiert. Alle Widgets in tkinter mit Ausnahme des Hauptfensters benötigen ein Elternelement.
Controller stellt ein anderes Objekt dar, das als gemeinsamer Interaktionspunkt für mehrere Widgets-Seiten fungieren soll. Es ist ein Versuch, die Seiten zu entkoppeln. Das heißt, jede Seite muss nicht über die anderen Seiten Bescheid wissen. Wenn es mit einer anderen Seite interagieren möchte, z. B. damit es sichtbar wird, kann es den Controller bitten, es sichtbar zu machen.
Sie haben gefragt "Es gibt eine bereits definierte Funktion namens show_frame, aber warum wird der Controller verwendet, um diese Funktion aufzurufen?" Beachten Sie, dass show_frame
in einer separaten Klasse definiert ist, in diesem Fall die Hauptprogrammklasse. Es ist in den anderen Klassen nicht definiert. Damit die anderen Klassen sie aufrufen können, müssen sie sie auf einer Instanz der Hauptklasse aufrufen. Diese Instanz heißt controller
im Kontext dieser anderen Klassen.
Hinweis: Auch wenn Sie wahrscheinlich den ursprünglichen Code in einem Online-Tutorial gefunden, es stammt ursprünglich aus dieser Antwort Stackoverflow: Switch between two frames in tkinter
Sie sind Parameter der Methode. Was verwirrt Sie an ihnen? Es gibt hier nichts Besonderes an "__init__", außer dass es automatisch mit den Parametern aufgerufen wird, die an den Instanziierungsaufruf übergeben wurden. –
* "Ich glaube, dass self diesem in Java ähnlich ist" * - ja. * "Was ist die Verwendung von Eltern und Controller?" * - sie sind nur zwei weitere Initialisierungsparameter.In Tkinter übergeben Sie im Allgemeinen das "Eltern" -Widget, in dem sich das neue Widget befindet, an jedes neue Widget, um einen Baum für die gesamte Benutzeroberfläche zu definieren. "Controller" ist anscheinend etwas, das verwendet werden kann, um die gesamte Benutzeroberfläche zu steuern, anstatt ein Widget für globale Änderungen verantwortlich zu machen. – jonrsharpe
Code scheint von http://stackoverflow.com/q/29444725/3001761 zu sein – jonrsharpe