我在一个垂直的 BoxSizer 中有几个 CollapsiblePanes。我希望能够在不让它们相互碰撞的情况下扩展和折叠它们。我在 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()
最佳答案
文档明确指出在将可折叠 Pane 添加到 sizer 时应该使用 ratio=0。
http://docs.wxwidgets.org/stable/wx_wxcollapsiblepane.html
因此,首先,将此行末尾的 1 更改为 0:
sizer.Add(SampleCollapsiblePane(self.main_panel, label = str(x)), 1)
接下来,将其添加到您的
SampleCollapsiblePane
以强制父框架在 Pane 折叠或展开时重新布局:def __init__(...):
...
self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.on_change)
def on_change(self, event):
self.GetParent().Layout()
可能有更好的方法,但这就是我目前的工作。我很擅长 wxPython,但之前没有使用过 CollapsiblePanes。
关于python - 展开时将 sizer 中的更多大小分配给 wx.CollapsiblePane,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6589509/