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
Barbara StreisandOriginal
2024-11-03 01:48:02433browse

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>

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>

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>

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>

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>

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>

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:
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
Previous article:From Data to DeploymentNext article:From Data to Deployment