ホームページ  >  記事  >  バックエンド開発  >  ある Tkinter ページから別の Tkinter ページに StringVar データにアクセスするにはどうすればよいですか?

ある Tkinter ページから別の Tkinter ページに StringVar データにアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 01:48:02383ブラウズ

How to Access StringVar Data from One Tkinter Page to Another?

クラスから変数データにアクセスする方法

問題の概要

複数ページの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。