Home > Backend Development > Python Tutorial > How to Access StringVar Data from One Tkinter Page to Another?

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

Barbara Streisand
Release: 2024-11-03 01:48:02
Original
442 people have browsed it

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

How to Access Variable Data from a Class

Problem Summary

You have multiple pages of widgets collecting user input in a multi-page Tkinter application. Each page is instantiated as a class in the main application, but you're facing difficulty in obtaining the value of a StringVar from a widget in one page (PageOne) in another page (PageTwo).

Solution: Leveraging your Controller

Utilizing the controller, you can establish communication between pages. Firstly, save a reference to the controller within each page:

<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>
Copy after login

Secondly, incorporate a method in the controller that retrieves a page based on its class name:

<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>
Copy after login

With this method, pages can access each other by calling this function and gaining a reference to the target page. Subsequently, you can access the shared members of that page, like so:

<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>
Copy after login

Alternative Solution: Storing Data in the Controller

To avoid tight coupling between pages, consider storing shared data in the controller. This method allows pages to be independent of each other's internal designs:

<code class="python">class MyApp(Tk):
    def __init__(self):
        ...
        self.app_data = {"name":    StringVar(),
                         "address": StringVar(),
                         ...
                        }</code>
Copy after login

Modify pages to reference the controller when creating widgets:

<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>
Copy after login

Finally, access data from the controller, eliminating the need for get_page:

<code class="python">    def print_it(self):
        value = self.controller.app_data["address"].get()
        ...</code>
Copy after login

The above is the detailed content of How to Access StringVar Data from One Tkinter Page to Another?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template