我尝试使用wxPython工具包的CollapsiblePane组件。我直接在面板中添加了2个复选框,并在放置在面板中的CollapsiblePane下添加了2个复选框。我的问题是可折叠窗格及其下的组件不响应鼠标事件,即我无法展开/折叠窗格或与CollapsiblePane下的组件交互。
以下是示例代码。尝试在collapsiblePane下切换复选框,他们不做出反应
import wx
import sys
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__( self, None, -1, "My Frame" ) # , size=(300,300)
self.panel = wx.Panel(self)
sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=5, vgap=5)
CB1 = wx.CheckBox( self.panel, -1, "dene-1")
CB2 = wx.CheckBox( self.panel, -1, "dene-2")
CP = wx.CollapsiblePane(self, -1, label="TITLE", style=wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE)
self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, CP)
win = CP.GetPane()
pansizer = wx.BoxSizer( wx.VERTICAL )
cb1 = wx.CheckBox( win, -1, "enable 1")
cb2 = wx.CheckBox( win, -1, "enable 2")
pansizer.Add( cb1, 0, wx.GROW | wx.ALL )
pansizer.Add( cb2, 0, wx.GROW | wx.ALL )
win.SetSizer( pansizer )
pansizer.SetSizeHints(win)
CP.Expand()
sizer.Add( CB1, 0, wx.ALL )
sizer.Add( CB2, 0, wx.ALL )
sizer.Add( CP, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 5 )
self.panel.SetSizer( sizer )
self.panel.Fit()
def OnPaneChanged(self, evt):
# redo the layout
self.Layout()
if __name__=="__main__":
app = wx.App()
frame = MyFrame()
frame.Show(True)
app.MainLoop()
答案 0 :(得分:0)
您创建了一个self.panel对象,但创建了可折叠窗格作为框架的子窗口。 您需要更改窗口更新的方式。首先必须布局sizer然后你必须适合你的面板,然后适合你的窗口。代码发布在下面。我更改了框架的大小,以便您可以看到窗格的展开和折叠。
def __init__(self):
wx.Frame.__init__( self, None, -1, "My Frame" ) # , size=(300,300)
self.panel = wx.Panel(self)
sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=5, vgap=5)
CB1 = wx.CheckBox( self.panel, -1, "dene-1")
CB2 = wx.CheckBox( self.panel, -1, "dene-2")
CP = wx.CollapsiblePane(self.panel, -1, label="TITLE", style=wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE)
CP.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged)
win = CP.GetPane()
pansizer = wx.BoxSizer( wx.VERTICAL )
cb1 = wx.CheckBox( win, -1, "enable 1")
cb2 = wx.CheckBox( win, -1, "enable 2")
pansizer.Add( cb1, 0, wx.GROW | wx.ALL )
pansizer.Add( cb2, 0, wx.GROW | wx.ALL )
win.SetSizer( pansizer )
pansizer.SetSizeHints(win)
CP.Collapse()
sizer.Add( CB1, 0, wx.ALL )
sizer.Add( CB2, 0, wx.ALL )
sizer.Add( CP, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 5 )
self.panel.SetSizerAndFit( sizer )
self.Fit()
def OnPaneChanged(self, evt):
# redo the layout
self.panel.GetSizer().Layout()
self.panel.Fit()
self.Fit()
如果名称 ==“主要”: app = wx.App() frame = MyFrame() frame.Show(真) app.MainLoop()