여러 페이지로 구성된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!