GUI プログラミングのコンテキストでは、単一のアプリケーション ウィンドウ内に複数のページがあることが一般的です。各ページには、入力フィールド、ボタン、ラベルなどのさまざまなウィジェットが含まれる場合があります。これらのウィジェットを操作するとき、ユーザーは入力を行うか、さまざまなページ間で共有する必要がある選択を行います。このため、特にクラスが異なるページを表す場合に、あるクラスから別のクラスへ変数データにアクセスする方法という問題が生じます。
効果的なアプローチの 1 つは、コントローラ クラスの概念を活用することです。 。提供されたコード スニペットには、PageOne や PageTwo などの複数のページを管理する MyApp クラスがあります。通常、コントローラーはアプリケーションのさまざまな部分の間の仲介者として機能し、通信を容易にします。コントローラーを使用して変数データを取得する方法は次のとおりです:
各ページ クラスにコントローラーへの参照を追加します:
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller</code>
クラス名でページ インスタンスを取得するメソッドをコントローラーに作成します。
<code class="python">class MyApp(Tk): def get_page(self, classname): for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page</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()</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">class PageTwo(ttk.Frame): def print_it(self): value = self.controller.app_data["address"].get()</code>
これらのアプローチのいずれかを実装することにより、GUI アプリケーション内の異なるページ クラス間で変数データを効果的に共有できます。コントローラーベースのアプローチは、密結合と通信の集中制御ポイントを提供すると同時に、コントローラーにデータを保存することで切り離しと柔軟性を促進します。どのアプローチを選択するかは、アプリケーションの特定の要件と、ページ間で必要な対話とデータ共有のレベルによって異なります。
以上がGUI アプリケーションの異なるページ間で変数データを共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。