ホームページ  >  記事  >  バックエンド開発  >  Tkinter マルチページ アプリケーションのページ間でデータを渡すにはどうすればよいですか?

Tkinter マルチページ アプリケーションのページ間でデータを渡すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 09:12:02159ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。