2013-01-16 65 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