Heim > Backend-Entwicklung > Python-Tutorial > Wie greife ich von einer Tkinter-Seite zur anderen auf StringVar-Daten zu?

Wie greife ich von einer Tkinter-Seite zur anderen auf StringVar-Daten zu?

Barbara Streisand
Freigeben: 2024-11-03 01:48:02
Original
396 Leute haben es durchsucht

How to Access StringVar Data from One Tkinter Page to Another?

So greifen Sie auf variable Daten einer Klasse zu

Problemzusammenfassung

Sie haben mehrere Seiten mit Widgets, die Benutzereingaben in einer mehrseitigen Tkinter-Anwendung sammeln . Jede Seite wird als Klasse in der Hauptanwendung instanziiert, aber Sie haben Schwierigkeiten, den Wert einer StringVar von einem Widget auf einer Seite (PageOne) auf einer anderen Seite (PageTwo) abzurufen.

Lösung: Nutzung Ihr Controller

Mithilfe des Controllers können Sie die Kommunikation zwischen Seiten herstellen. Speichern Sie zunächst einen Verweis auf den Controller in jeder Seite:

<code class="python">class PageOne(ttk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        ...

class PageTwo(ttk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        ...</code>
Nach dem Login kopieren

Zweitens integrieren Sie eine Methode in den Controller, die eine Seite basierend auf ihrem Klassennamen abruft:

<code class="python">class MyApp(Tk):
    ...
    def get_page(self, classname):
        '''Returns an instance of a page given it's class name as a string'''
        for page in self.frames.values():
            if str(page.__class__.__name__) == classname:
                return page
        return None</code>
Nach dem Login kopieren

Damit Mit dieser Methode können Seiten aufeinander zugreifen, indem sie diese Funktion aufrufen und einen Verweis auf die Zielseite erhalten. Anschließend können Sie wie folgt auf die freigegebenen Mitglieder dieser Seite zugreifen:

<code class="python">class PageTwo(ttk.Frame):
    ...
    def print_it(self):
        page_one = self.controller.get_page("PageOne")
        value = page_one.some_entry.get()
        print ('The value stored in StartPage some_entry = %s' % value)</code>
Nach dem Login kopieren

Alternative Lösung: Daten im Controller speichern

Um eine enge Kopplung zwischen Seiten zu vermeiden, sollten Sie die Speicherung gemeinsam genutzter Daten in in Erwägung ziehen der Controller. Mit dieser Methode können Seiten unabhängig von den internen Designs der anderen Seiten sein:

<code class="python">class MyApp(Tk):
    def __init__(self):
        ...
        self.app_data = {"name":    StringVar(),
                         "address": StringVar(),
                         ...
                        }</code>
Nach dem Login kopieren

Ändern Sie Seiten so, dass sie beim Erstellen von Widgets auf den Controller verweisen:

<code class="python">class PageOne(ttk.Frame):
    def __init__(self, parent, controller):
        self.controller=controller
        ...
        self.some_entry = ttk.Entry(self,
            textvariable=self.controller.app_data["name"], ...) </code>
Nach dem Login kopieren

Zuletzt greifen Sie auf Daten vom Controller zu, wodurch eliminiert wird die Notwendigkeit von get_page:

<code class="python">    def print_it(self):
        value = self.controller.app_data["address"].get()
        ...</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie greife ich von einer Tkinter-Seite zur anderen auf StringVar-Daten zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage