問題:
Tkinter を使用したマルチページ アプリケーションで、どのようにするかあるページ上のクラスは、別のページ上のクラスに格納されている変数データにアクセスできますか?
コントローラーの活用:
既にコントローラーを利用していると仮定すると、ページ間の通信にこれを悪用できます。
各ページにコントローラーへの参照を保存します。
<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>
データにアクセスする必要があるページで、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>
コントローラーへのデータの保存:
ページ間の結合を減らすには、共有データをコントローラーに保存することを検討してください。
変数を保存するためにコントローラにデータ構造を作成します:
<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>
コントローラーからデータにアクセスします:
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
以上がTkinter マルチページ アプリケーションのページ間でデータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。