GUI プログラミングのコンテキストでは、単一のアプリケーション ウィンドウ内に複数のページがあることが一般的です。各ページには、入力フィールド、ボタン、ラベルなどのさまざまなウィジェットが含まれる場合があります。これらのウィジェットを操作するとき、ユーザーは入力を行うか、さまざまなページ間で共有する必要がある選択を行います。このため、特にクラスが異なるページを表す場合に、あるクラスから別のクラスへ変数データにアクセスする方法という問題が生じます。
効果的なアプローチの 1 つは、コントローラー クラスの概念を活用することです。 。提供されたコード スニペットには、PageOne や PageTwo などの複数のページを管理する MyApp クラスがあります。通常、コントローラーはアプリケーションのさまざまな部分の間の仲介者として機能し、通信を容易にします。コントローラーを使用して変数データを取得する方法は次のとおりです:
各ページ クラスにコントローラーへの参照を追加します:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
クラス名でページ インスタンスを取得するメソッドをコントローラー内に作成します:
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
別のページからターゲット ページのパブリック メンバーにアクセスします:
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
あるいは、共有データをページではなくコントローラー自体に保存することを検討できます。クラス。このアプローチにより、ページが相互に分離され、ページ間の緊密な結合の必要性が軽減されます。実装方法は次のとおりです:
すべての共有データを保存するデータ構造をコントローラーに作成します:
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
ウィジェットの作成時にコントローラーのデータ構造を参照するように各ページを変更します:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
ページ クラスの代わりにコントローラーから共有データにアクセスします:
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
これらのアプローチのいずれかを実装すると、GUI アプリケーション内の異なるページ クラス間で変数データを効果的に共有できます。コントローラーベースのアプローチは、密結合と通信の集中制御ポイントを提供すると同時に、コントローラーにデータを保存することで分離と柔軟性を促進します。どのアプローチを選択するかは、アプリケーションの特定の要件と、ページ間で必要な対話とデータ共有のレベルによって異なります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3