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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!