問題:
在使用Tkinter 的多頁應用程式中,如何一個頁面上的類別可以存取儲存在不同頁面上的類別中的變數資料嗎?
利用您的控制器:
假設您已經在使用控制器,您可以利用它進行頁面之間的通訊。
在每個頁面中儲存控制器的參考:
<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>
在需要存取資料的頁面中,使用get_page 方法:
<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>
從控制器存取資料:
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
以上是如何在 Tkinter 多頁面應用程式中的頁面之間傳遞資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!