在展开时为wx.CollapsiblePane分配更多尺寸
我有几个可以折叠的面板,它们放在一个垂直的盒子布局里。我希望能够展开和折叠这些面板,而不让它们互相挤在一起。我现在在Windows 7上使用的是wxPython 2.8.10.1。
下面是一个可以运行的示例程序,展示了这个问题。
import wx
class SampleCollapsiblePane(wx.CollapsiblePane):
def __init__(self, *args, **kwargs):
wx.CollapsiblePane.__init__(self,*args,**kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
for x in range(5):
sizer.Add(wx.Button(self.GetPane(), label = str(x)))
self.GetPane().SetSizer(sizer)
class Main_Frame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.main_panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
for x in range(5):
sizer.Add(SampleCollapsiblePane(self.main_panel, label = str(x)), 1)
self.main_panel.SetSizer(sizer)
class SampleApp(wx.App):
def OnInit(self):
frame = Main_Frame(None, title = "Sample App")
frame.Show(True)
frame.Centre()
return True
def main():
app = SampleApp(0)
app.MainLoop()
if __name__ == "__main__":
main()
1 个回答
4
文档明确说明,在给可折叠面板添加到布局时,应该把比例设置为0。
http://docs.wxwidgets.org/stable/wx_wxcollapsiblepane.html
所以,首先,把这一行末尾的1改成0:
sizer.Add(SampleCollapsiblePane(self.main_panel, label = str(x)), 1)
接下来,在你的SampleCollapsiblePane
中添加这个代码,以便在面板折叠或展开时强制父窗口重新布局:
def __init__(...):
...
self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.on_change)
def on_change(self, event):
self.GetParent().Layout()
可能还有更好的方法,但这是我目前能用的。我对wxPython很熟悉,但之前没用过可折叠面板。