2013-10-15 34 views
1

我的主要wxPython應用程序wx.Frame目前充滿了按鈕和文本字段以及主應用程序顯示區域。所有事件處理程序和UI代碼都包含在將命令傳遞給Control類的MainFrame類中。如何將wxPython控件移動到另一個框架

我想將這些控件中的一些從MainFrame移動到可以隱藏的新的SecondaryFrame。我創建了一個SecondaryFrame的實例,然後使用一個菜單項來顯示和隱藏它。

我似乎有兩個選擇執行:

  1. 所有控制的移動創建和處理程序代碼到SecondaryFrame類。
  2. 創建一個空白SecondaryFrame並從大型機中留下全部到位的處理程序,使主機的控制成員,而不是SecondaryFrame
  3. 兩個

是的組合來填充它看起來像所有的這些這些選項需要對代碼進行重要的重構。我錯過了一個更明顯的方式將已經有功能的控件移動到新的框架中嗎?

回答

1

每個框架都需要有自己的小部件。如果你希望兩個框架出於某種原因具有相同的控件,那麼我會創建一個基類框架,並讓其他兩個框架繼承它。

處理程序代碼本身可以保存在控制器模塊中。然後,你會進口控制器和做這樣的事情:

mySecondaryFramesBtn.Bind(wx.EVT_BUTTON, controller.btnHandler) 

可以綁定在第一幀和第二幀相同的處理程序的按鈕的方式,可以這麼說。

你也可以看看model-view-controller的概念。您可以通過以下鏈接閱讀更多關於它:

+0

該項目主要是MVC。我確實有一個控制器類,但是我試圖保持GUI不可知。所有的事件處理程序和GUI相關的控制代碼都在MainFrame類中。 – Mike

+1

處理程序與控件不同的類中的問題是,某些處理程序需要訪問控件本身,例如在文本控件和複選框的情況下。我沒有看到一種乾淨的方式讓一個類中的處理程序從另一個類中的控件中獲取數據。它可以工作,但它感覺馬虎。 – Mike

+0

我不知道你想在幀之間傳遞數據。就我個人而言,我使用pubsub。它使得類之間的傳遞數據非常容易。 –

相關問題