首页 > 后端开发 > Python教程 > 如何从一个 Tkinter 页面到另一页面访问 StringVar 数据?

如何从一个 Tkinter 页面到另一页面访问 StringVar 数据?

Barbara Streisand
发布: 2024-11-03 01:48:02
原创
421 人浏览过

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

如何从类访问变量数据

问题摘要

您有多个页面的小部件在多页面 Tkinter 应用程序中收集用户输入。每个页面都在主应用程序中实例化为一个类,但您在从一个页面 (PageOne) 的另一个页面 (PageTwo) 中的小部件获取 StringVar 的值时遇到困难。

解决方案:利用你的控制器

利用控制器,你可以在页面之间建立通信。首先,在每个页面中保存对控制器的引用:

<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>
登录后复制

其次,在控制器中合并一个方法,根据其类名检索页面:

<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>
登录后复制

使用此方法,页面可以通过调用该函数并获得对目标页面的引用来相互访问。随后,您可以访问该页面的共享成员,如下所示:

<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>
登录后复制

替代解决方案:在控制器中存储数据

为了避免页面之间的紧密耦合,请考虑将共享数据存储在控制器。此方法允许页面独立于彼此的内部设计:

<code class="python">class MyApp(Tk):
    def __init__(self):
        ...
        self.app_data = {"name":    StringVar(),
                         "address": StringVar(),
                         ...
                        }</code>
登录后复制

修改页面在创建小部件时引用控制器:

<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>
登录后复制

最后,从控制器访问数据,消除需要 get_page:

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

以上是如何从一个 Tkinter 页面到另一页面访问 StringVar 数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板