CollapsiblePane不会通过鼠标扩展/折叠或响应鼠标

时间:2010-12-28 19:45:41

标签: python wxpython

我尝试使用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()

1 个答案:

答案 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()