>  기사  >  백엔드 개발  >  한 Tkinter 페이지에서 다른 페이지로 StringVar 데이터에 액세스하는 방법은 무엇입니까?

한 Tkinter 페이지에서 다른 페이지로 StringVar 데이터에 액세스하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 01:48:02333검색

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 페이지에서 다른 페이지로 StringVar 데이터에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.