wxCollapsiblePaneを使う(今後の課題)
値を入力する項目が普段は折りたたまれているが、ボタンを押すことで展開するようにしたい。
wxPythonのデモの中に、ColapsiblePane.pyがあるので、それを参考にちょこっとテストしてみたが、うまく動作しない。ボタンを押すことで展開はするのであるが、他のコントロールの位置が展開に合わせてズレてくれない。2時間ぐらいあれこれやってみたのだが、時間切れ。
後日の課題として、とりあえずソースを置いておく。
""" _main_tree.py """ import os, sys import wx import MainFrame class Application(wx.App): def OnInit(self): frame = MainFrame.MainFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) return True def main(): import time app = Application(0) print "inf> Application started on %s" % time.ctime(time.time()) app.MainLoop() if __name__ == '__main__': main()
import wx class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 400, 400 wx.Frame.__init__(self, id, title="Frame 1", size=wx.Size(width, height)) sizer = wx.BoxSizer(wx.VERTICAL) Pan0 = wx.Panel(self, -1) self.cp = cp = wx.CollapsiblePane(Pan0, label="Properties") self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, cp) self.MakePaneContent(cp.GetPane()) line = wx.StaticLine(Pan0, -1, style=wx.LI_HORIZONTAL) StTxt1 = wx.StaticText(Pan0, -1, "++++EOF++++") sizer.Add(cp, 0, wx.LEFT|wx.EXPAND, 5) sizer.Add(line, 0, wx.GROW|wx.ALIGN_LEFT|wx.ALL, 5) sizer.Add(StTxt1, 0, wx.GROW|wx.ALIGN_LEFT|wx.ALL, 5) Pan0.SetSizer(sizer) sizer.Fit(Pan0) def OnPaneChanged(self, evt=None): self.Layout() def MakePaneContent(self, pane): vsizer = wx.BoxSizer(wx.VERTICAL) hsizer1 = wx.BoxSizer(wx.HORIZONTAL) StTxt0 = wx.StaticText(pane, -1, "Hello world!") vsizer.Add(StTxt0, 0, wx.ALIGN_LEFT|wx.ALL, 5) # water or air self.RBw = wx.RadioButton(pane, -1, "T", style=wx.RB_GROUP) self.RBa = wx.RadioButton(pane, -1, "F") self.RBw.SetValue(True) hsizer1.Add(self.RBw, 0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer1.Add(self.RBa, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer.Add(hsizer1, 0, wx.ALIGN_LEFT|wx.ALL, 5) pane.SetSizer(vsizer)
無理してこの機能を使わなくてもよいのだが、使えればかっこよくなる気がして、少しむきになって時間を浪費してしまった。
でもいろいろ悩んだことで、自分が何をわかっていないかがわかった。