wxNotebookで表示しているパネルを隠したいとき
wxNotebookを使って、いくつかのパネルをタブ切換えで表示させている。このとき、あるパネルだけ非表示にしたいときがある。そのときは、Hide()を使うことにする。
例えば、下記のコード。
import wx class MyApp(wx.PySimpleApp): def OnInit(self): Frm = wx.Frame(None, -1, 'Title', size=(500, 500)) pnl0 = wx.Panel(Frm, -1, size=(500, 500)) nb = wx.Notebook(pnl0, -1, style=wx.CLIP_CHILDREN) pnl1 = wx.Panel(nb, -1) pnl2 = wx.Panel(nb, -1) nb.AddPage(pnl1, 'Page 1') nb.AddPage(pnl2, 'Page 2') pnl1.Hide() #ここ! StTxt1 = wx.StaticText(pnl1, -1, 'Panel 1', pos=(20,30)) StTxt2 = wx.StaticText(pnl2, -1, 'Panel 2', pos=(20,30)) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(nb, 1, wx.EXPAND) pnl0.SetSizer(sizer) Frm.Show() return 1 app = MyApp() app.MainLoop()
再び表示させるときは、pnl1.Show()とすればよい。一時的にパネルを隠す場合に利用できる。
以下は、Hide()したときのLinuxでの実行結果。
でも、このコードは、Windowsでは意図したように動いてくれない。パネルが隠れてくれない。パネル上には何も表示されなくなるが...。なぜかは分からない。どうしようもないので、Windowsでは力技。
パネルを「隠す」ときには、
nb.RemovePage(0)
でパネルを消す。パネルを復活させるときには、
nb.AddPage(pnl1, 'Page 1')
で再び加える。でもこれだとパネルの順番を調整する処理が必要になるので、かなり面倒なことになる。
やはり、Hide()で隠れてほしい。