複数ページの Tkinter アプリケーションでユーザー入力を収集する複数ページのウィジェットがあります。 。各ページはメイン アプリケーションのクラスとしてインスタンス化されますが、あるページ (PageOne) のウィジェットから別のページ (PageTwo) にある StringVar の値を取得することが困難に直面しています。
コントローラーを使用して、ページ間の通信を確立できます。まず、各ページ内のコントローラーへの参照を保存します:
<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>
これにより、メソッドでは、この関数を呼び出してターゲット ページへの参照を取得することで、ページ間でアクセスできます。その後、次のように、そのページの共有メンバーにアクセスできます。
<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>
最後に、コントローラーからデータにアクセスし、 get_page の必要性:
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
以上がある Tkinter ページから別の Tkinter ページに StringVar データにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。