How to Access Variable Data Between Classes in a Multi-Page Application
In a multi-page application where each page is defined by a separate class, accessing variable data between classes can be challenging.
Leveraging the Controller
One approach is to use the application controller class to facilitate communication between pages. Add a reference to the controller to each page's constructor:
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ...</code>
Next, add a method to the controller that retrieves a page instance given its class name:
<code class="python">class MyApp(Tk): ... def get_page(self, classname): for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page return None</code>
Then, from within one page, you can access another page's variable data:
<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>
Storing Data in the Controller
To avoid tight coupling between pages, consider storing data in the controller rather than in specific pages:
<code class="python">class MyApp(Tk): def __init__(self): ... self.app_data = {"name": StringVar(), "address": StringVar(), ... }</code>
Then, within each page, reference the controller's data structure 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 the data from the controller directly:
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
The above is the detailed content of How to Share Data Between Classes in a Multi-Page Application?. For more information, please follow other related articles on the PHP Chinese website!