如何在 Tkinter 多頁面應用程式中的頁面之間傳遞資料?

Patricia Arquette
發布: 2024-11-02 09:12:02
原創
153 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!