2010-02-24 72 views
0

我有這樣的代碼:如何重新定義wx.GridSizer?

class SoundLog(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, size=(500, 350), *args, **kwargs) 
     self.SetBackgroundColour((110,110,110)) 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 

     pluginsNumber = len(plugins) - len(pluginsToHide) 

     self.gs = wx.GridSizer(pluginsNumber, 1, 0, 0) 
     pluginsList = self.getPluginsList() 
     self.gs.AddMany(pluginsList) 
     self.sizer.Add(self.gs, 1, wx.EXPAND) 
     self.SetSizer(self.sizer) 
     self.Centre() 
     self.Show(True) 

我怎樣才能讓這裏定義的重新定義GridSizer的功能?

是這樣的:

def redefineSizer(self): 
    self.Show(False) 
    pluginsNumber = len(plugins) - len(pluginsToHide) 
    self.gs.Clear() 
    self.sizer.Remove(self.gs) 
    self.gs = wx.GridSizer(pluginsNumber, 1, 0, 0) 
    print self.gs 
    pluginsList = self.getPluginsList() 
    self.gs.AddMany(pluginsList) 
    self.sizer.Add(self.gs, 1, wx.EXPAND) 
    self.SetSizer(self.sizer) 
    self.Centre() 
    self.Show(True) 

或者是這樣的:

def redefineSizer(self): 
    pluginsNumber = len(plugins) - len(pluginsToHide) 
    self.gs.SetRows(pluginsNumber) 
    self.gs.Clear(deleteWindows=False) 
    pluginsList = self.getPluginsList() 
    self.gs.AddMany(pluginsList) 
    self.SetSizer(self.sizer) 

但我知道(原因它不工作),我失去了一些東西。 這是什麼?

我把面板放在GridSizer裏面,但有一個選項可以關閉它們。 當我關閉一個面板時,我想重新定義GridSizer以減少一行並移除關閉的面板。

所以,當我點擊close時,我會調用redefineSizer來移除該面板並自行更新。 這就是我想要做的!

感謝提前:)

+0

如果您告訴您正在嘗試達到的目標,可能不會提供解決方案,但會更有助於理解問題 – 2010-02-24 10:00:58

+0

我將面板放入GridSizer中,但有一個關閉它們的選項。 當我關閉一個面板時,我想重新定義GridSizer以減少一行並移除關閉的面板。 因此,當我點擊關閉時,我會調用redefineSizer來移除該面板並自行更新。 這就是我想要做的! – 2010-02-24 12:38:59

回答

1

如果你正在使用類似的AUI framework,你可以簡單地創建一個新的網格分級機和換出你已經得到了一個。