我在垂直BoxSizer中有几个CollapsiblePanes。我希望能够扩展和折叠它们而不会让它们相互碰撞。我在Windows 7上运行wxPython 2.8.10.1。
演示问题的Runnable示例应用程序如下。
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()
答案 0 :(得分:4)
文档明确指出在将可折叠窗格添加到sizer时应使用proportion = 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很好,但之前没有使用过CollapsiblePanes。