wxCollapsiblePaneで開閉できるパネルを作る

ボタンを押すと出たり消えたりするパネルを、wxPythonで作りたい。wxCollapsiblePaneが、一番動作イメージに近いかな、と思うので使い方を検討する。

参考:wxPython API Documentation — wxPython Phoenix 4.0.3 documentation

例えば、「Show」の方のラジオボタンを押すと現れて、「Hide」の方を押すと隠れるようにしてみる。wx.CollapsiblePaneを使って以下のコードを書く。
気に入らない点は、三角のトグルスイッチが常に表示される、というところ。ラジオボタンでパネルの開閉をコントロールしたいので、理想的にはトグルスイッチは不要だ。

import wx

label1 = "Test label"

class MyApp(wx.PySimpleApp):
    def OnInit(self):
        Frm = wx.Frame(None, -1, 'Title', size=(300, 250))
        self.p = p = wx.Panel(Frm, -1) #大元になるパネル

        self.rbox = wx.RadioBox(p, -1, "Test", choices=['Show', 'Hide']) #このボタンでパネルを出したり隠したりする
        self.rbox.SetSelection(1) #最初はHideにしておく。
        self.rbox.Bind(wx.EVT_RADIOBOX, self.check)

        self.cp = wx.CollapsiblePane(p, label=label1,
                      style=wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE)
        self.cp.Disable()
        self.cp.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.changed)

        cp = self.cp.GetPane() #パネルの上に何か置くときGetPane()でアクセスできる
        st1 = wx.StaticText(cp, -1, "This is a sentence..." )
        st2 = wx.StaticText(cp, -1, "Can you see?" )
        ssizer = wx.BoxSizer(wx.VERTICAL)
        ssizer.Add(st1, 0, wx.ALL, 10)
        ssizer.Add(st2, 0, wx.ALL, 10)
        cp.SetSizer(ssizer)

        st3 = wx.StaticText(p, -1, "hoge hoge ..." )

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.rbox, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(self.cp, 0, wx.ALL|wx.CENTER, 10) 
        sizer.Add(st3, 0, wx.ALL|wx.CENTER, 10)
        p.SetSizer(sizer)

        Frm.Show()
        return 1

    def changed(self, evt=None):
        self.p.Layout()

    def check(self, evt):
        num = self.rbox.GetSelection()
        if num == 0:
            self.cp.Collapse(False) #パネルを開く
            self.cp.Enable()
        else:
            self.cp.Collapse(True)  #パネルを隠す
            self.cp.Disable()
        self.changed()

app = MyApp()
app.MainLoop()

実行画面は下のようになる。

トグルスイッチを押されて、パネルが開かれるのを防ぐために、初期にはColloapsiblePaneはDisableにしてある。ラジオボタンを「Show」にしたとき、初めてEnableになりパネルが開く。

「Show」のときも、トグルスイッチでパネルを閉じることができるが、それはまあ、良しとする。

Windowsで実行すると、下のように見た目が若干異なる。トグルスイッチがボタンになる。