在 GUI 程式設計環境中,單一應用程式視窗中包含多個頁面是很常見的。每個頁面可能包含各種小部件,例如輸入欄位、按鈕或標籤。當與這些小部件互動時,使用者提供輸入或做出需要在不同頁面之間共享的選擇。這就提出瞭如何從一個類別存取另一個類別的變數資料的問題,特別是當這些類別代表不同的頁面時。
一個有效的方法是利用控制器類別的概念。在您提供的程式碼片段中,您有一個管理多個頁面的 MyApp 類,例如 PageOne 和 PageTwo。通常,控制器充當應用程式不同部分之間的中介並促進溝通。以下是如何使用控制器來取得變數資料:
在每個頁面類別中加入控制器的引用:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
在控制器中建立一個方法,透過其類別名稱取得頁面實例:
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
從另一個頁面訪問目標頁的公共成員:
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
或者,您可以考慮在控制器本身而不是頁面中儲存共用資料類。這種方法將頁面彼此解耦,並減少了它們之間緊密耦合的需要。實作方式如下:
在控制器中建立一個資料結構來儲存所有共享資料:
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
在建立widgets時修改每個頁引用控制器的資料結構:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
從控制器而不是頁面類別存取共享資料:
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
透過實作其中一種方法,您可以在GUI 應用程式中的不同頁麵類別之間有效地共享變數資料。基於控制器的方法提供了緊密耦合和集中的通訊控制點,同時將資料儲存在控制器中促進了解耦和靈活性。方法的選擇取決於應用程式的具體要求以及頁面之間所需的互動和資料共享的層級。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3