首页  >  文章  >  后端开发  >  如何在 Tkinter 多页面应用程序中的页面之间传递数据?

如何在 Tkinter 多页面应用程序中的页面之间传递数据?

Patricia Arquette
Patricia Arquette原创
2024-11-02 09:12:02155浏览

How to Pass Data Between Pages in a Tkinter Multi-Page Application?

如何从类访问变量数据

问题:

在使用 Tkinter 的多页面应用程序中,如何一个页面上的类可以访问存储在不同页面上的类中的变量数据吗?

利用您的控制器:

假设您已经在使用控制器,您可以利用它进行页面之间的通信。

  1. 在每个页面中存储对控制器的引用:

    <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>
  2. 在控制器根据类名检索页面:

    <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>
  3. 在需要访问数据的页面中,使用 get_page 方法:

    <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>

在控制器中存储数据:

为了减少页面之间的耦合,可以考虑将共享数据存储在控制器中。

  1. 在控制器中创建数据结构来存储变量:

    <code class="python">class MyApp(Tk):
     def __init__(self):
         ...
         self.app_data = {"name":    StringVar(),
                          "address": StringVar(),
                          ...
                         }</code>
  2. 更新页面以引用控制器的数据:

    <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>
  3. 从控制器访问数据:

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

以上是如何在 Tkinter 多页面应用程序中的页面之间传递数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn