Im Kontext der GUI-Programmierung ist es üblich, mehrere Seiten in einem einzigen Anwendungsfenster zu haben. Jede Seite kann verschiedene Widgets enthalten, beispielsweise Eingabefelder, Schaltflächen oder Beschriftungen. Bei der Interaktion mit diesen Widgets gibt der Benutzer Eingaben oder trifft Entscheidungen, die auf verschiedenen Seiten geteilt werden müssen. Dies wirft die Frage auf, wie auf variable Daten von einer Klasse zu einer anderen zugegriffen werden kann, insbesondere wenn diese Klassen unterschiedliche Seiten darstellen.
Ein effektiver Ansatz besteht darin, das Konzept einer Controller-Klasse zu nutzen . In Ihrem bereitgestellten Codeausschnitt verfügen Sie über eine MyApp-Klasse, die mehrere Seiten verwaltet, z. B. PageOne und PageTwo. Typischerweise fungiert der Controller als Vermittler zwischen verschiedenen Teilen der Anwendung und erleichtert die Kommunikation. So können Sie den Controller verwenden, um variable Daten abzurufen:
Fügen Sie in jeder Seitenklasse einen Verweis auf den Controller hinzu:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
Erstellen Sie eine Methode im Controller, um eine Seiteninstanz anhand ihres Klassennamens abzurufen:
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
Greifen Sie von einer anderen Seite aus auf die öffentlichen Mitglieder der Zielseite zu:
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
Alternativ können Sie erwägen, gemeinsam genutzte Daten im Controller selbst und nicht auf der Seite zu speichern Klassen. Dieser Ansatz entkoppelt die Seiten voneinander und verringert die Notwendigkeit einer engen Kopplung zwischen ihnen. So kann es implementiert werden:
Erstellen Sie eine Datenstruktur im Controller, um alle gemeinsam genutzten Daten zu speichern:
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
Ändern Sie jede Seite, um beim Erstellen von Widgets auf die Datenstruktur des Controllers zu verweisen:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
Zugriff auf die freigegebenen Daten vom Controller statt über die Seitenklassen :
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
Durch die Implementierung eines dieser Ansätze können Sie variable Daten effektiv zwischen verschiedenen Seitenklassen innerhalb Ihrer GUI-Anwendung teilen. Der Controller-basierte Ansatz sorgt für eine enge Kopplung und einen zentralen Kontrollpunkt für die Kommunikation, während die Speicherung von Daten im Controller die Entkopplung und Flexibilität fördert. Die Wahl des Ansatzes hängt von den spezifischen Anforderungen Ihrer Anwendung und dem Grad der Interaktion und des Datenaustauschs ab, der zwischen den Seiten erforderlich ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3