2013-01-16 90 views
0

我在wxFrame中有一個wxCollapsiblePane和一個wxGrid。每次我摺疊或展開wxCollapsiblePane時,整個框架都會調整大小。我想要的是wxGrid的增長和縮小,而框架保持相同的大小。我還注意到,儘管我明確創建了500x500大小的wxFrame,但它實際上縮小以適應其內容。我認爲這與sizer有關,但我沒有試過似乎會影響到這一點。任何人都可以指出我要出錯的地方嗎?這是我的代碼到目前爲止。wxCollapsiblePane強制框架調整大小

import wx 
import wx.grid 

class Frame(wx.Frame): 

    def __init__(self, *args, **kwargs): 
     super(Frame, self).__init__(*args, **kwargs) 
     cpane = wx.CollapsiblePane(self) 
     p = cpane.GetPane() 
     sz = wx.BoxSizer() 
     sz.Add(wx.TextCtrl(p), 1, wx.EXPAND) 
     p.SetSizer(sz) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.grid = wx.grid.Grid(self) 
     self.grid.CreateGrid(5, 5) 

     sizer.Add(cpane, 0, wx.EXPAND) 
     sizer.Add(self.grid, 1, wx.EXPAND) 
     self.SetSizer(sizer) 
     self.SetAutoLayout(1) 
     sizer.Fit(self) 
     self.Show() 

app = wx.App(False) 
win = Frame(None, size=(500, 500)) 
win.Show() 
app.MainLoop() 

回答

3

爲了不讓CollapsiblePane來調整框架使用wx.CP_NO_TLW_RESIZE風格,當你創建它。請參閱http://docs.wxwidgets.org/trunk/classwx_collapsible_pane.html

Fit()調用是縮小幀以適合內容的內容。如果您不希望發生這種情況,則不需要。在代碼中SetAutoLayout調用是多餘的,因爲SetSizer會爲你調用該屬性。

+0

謝謝,我已經找到了解決方法,將所有的小部件放在一個面板中,但這是一個更接近於解決方案。我曾想過關於SetAutoLayout,但我直接從官方文檔中的例子中複製它,它們喜歡它們可能會過時 – aquavitae