在 GUI 程式設計環境中,單一應用程式視窗中存在多個頁面是很常見的。每個頁面可能包含各種小部件,例如輸入欄位、按鈕或標籤。當與這些小部件互動時,使用者提供輸入或做出需要在不同頁面之間共享的選擇。這就提出瞭如何從一個類別存取另一個類別的變數資料的問題,特別是當這些類別代表不同的頁面時。
一種有效的方法涉及利用控制器類別的概念。在您提供的程式碼片段中,您有一個管理多個頁面的 MyApp 類,例如 PageOne 和 PageTwo。通常,控制器充當應用程式不同部分之間的中介並促進溝通。以下是如何使用控制器取得變數資料:
在每個頁類中加入控制器的參考:
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller</code>
在控制器中建立一個方法,透過類別名稱取得頁面實例:
<code class="python">class MyApp(Tk): def get_page(self, classname): for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page</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()</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">class PageTwo(ttk.Frame): def print_it(self): value = self.controller.app_data["address"].get()</code>
透過實作其中一種方法,您可以在GUI 應用程式中的不同頁麵類別之間有效地共用變數資料。基於控制器的方法提供了緊密耦合和集中的通訊控制點,同時將資料儲存在控制器中促進了解耦和靈活性。方法的選擇取決於應用程式的具體要求以及頁面之間所需的互動和資料共享的層級。
以上是如何在 GUI 應用程式中的不同頁面之間共用變數資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!