Beim Zugriff auf Daten von anderen Seiten in tkinter ist dies unerlässlich um einen Verweis auf die spezifische Seite zu haben, auf die Sie abzielen. In Ihrem Fall muss PageTwo die Variable self.v von PageOne abrufen.
Tkinter bietet hierfür einen einfachen Mechanismus. Fügen Sie dem Konstruktor jeder Seite ein self.controller-Attribut hinzu, das Zugriff auf das Controller-Objekt ermöglicht. Der Controller enthält Verweise auf alle Seiten, sodass Sie die Verweise jeder Seite abrufen können.
Fügen Sie dem Konstruktor jeder Seite die folgende Zeile hinzu, um das self.controller-Attribut festzulegen:
self.controller = controller
Als nächstes fügen Sie hinzu eine get_page-Methode für die SampleApp-Klasse, um Seitenverweise abzurufen:
class SampleApp(tk.Tk): ... def get_page(self, page_class): return self.frames[page_class] ...
Jetzt können Sie innerhalb jeder Seite auf das Objekt einer anderen Seite zugreifen mit der get_page-Methode des Controllers. In PageTwo können Sie beispielsweise wie folgt auf die v-Variable von PageOne zugreifen:
page1 = self.controller.get_page(PageOne) page1.v.set("Hello, world")
Eine elegantere Lösung besteht darin, gemeinsam genutzte Daten zu erstellen, auf die alle Seiten zugreifen können. Initialisieren Sie ein Wörterbuch in der SampleApp-Klasse und gewähren Sie jeder Seite Zugriff über den Controller:
class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.shared_data = { "username": tk.StringVar(), "password": tk.StringVar(), ... }
Seiten können dann über den Controller auf die freigegebenen Daten zugreifen:
entry1 = tk.Entry(self, textvariable=self.controller.shared_data["username"]) username = self.controller.shared_data["username"].get()
Die Nutzung freigegebener Daten fördert lose Kopplung, wodurch Seitenänderungen einfacher werden, ohne andere Seiten zu beeinträchtigen. Der Controller dient als zentraler Bezugspunkt und reduziert die Abhängigkeit zwischen Seiten.
Das obige ist der detaillierte Inhalt vonWie teile ich Daten zwischen verschiedenen Klassen in einer Tkinter-Anwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!