Notebook
wxPythonでタブ化して表示する場合は、Notebookを使用します。スッキリとしたレイアウトが実現出来るので、部品の数が多い場合やグループ化した方が良い場合などのケースで役に立つでしょう。
20行目から22行目でそれぞれ別のパネルを「Notebook」へ追加し、タブ化して表示しています。「InsertPage」の引数は、タブインデックス、追加部品、タブ名称の順番です。
# -*- coding: utf-8 -*-
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,150))
notebook = wx.Notebook(frame, wx.ID_ANY)
panel_1 = wx.Panel(notebook, wx.ID_ANY)
panel_2 = wx.Panel(notebook, wx.ID_ANY)
panel_3 = wx.Panel(notebook, wx.ID_ANY)
panel_1.SetBackgroundColour("#FF0000")
panel_2.SetBackgroundColour("#00FF00")
panel_3.SetBackgroundColour("#0000FF")
notebook.InsertPage(0, panel_1, "tab_1")
notebook.InsertPage(1, panel_2, "tab_2")
notebook.InsertPage(2, panel_3, "tab_3")
frame.Show()
application.MainLoop()
--実行結果--
それぞれのタブを選択した状態です。



タブの表示位置を上下左右で指定する事が可能です。Notebookの初期化時に「style」を渡します。
※指定無しの場合は「wx.NB_TOP」が適用され、タブは上部に表示されます。
# -*- coding: utf-8 -*-
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,300))
notebook = wx.Notebook(frame, wx.ID_ANY, style=wx.NB_RIGHT)
#notebook = wx.Notebook(frame, wx.ID_ANY, style=wx.NB_LEFT)
#notebook = wx.Notebook(frame, wx.ID_ANY, style=wx.NB_BOTTOM)
panel_1 = wx.Panel(notebook, wx.ID_ANY)
panel_2 = wx.Panel(notebook, wx.ID_ANY)
panel_3 = wx.Panel(notebook, wx.ID_ANY)
panel_1.SetBackgroundColour("#FF0000")
panel_2.SetBackgroundColour("#00FF00")
panel_3.SetBackgroundColour("#0000FF")
notebook.InsertPage(0, panel_1, "tab_1")
notebook.InsertPage(1, panel_2, "tab_2")
notebook.InsertPage(2, panel_3, "tab_3")
frame.Show()
application.MainLoop()
--実行結果--
「wx.NB_RIGHT」が適用され、右部にタブが表示されています。

指定のタブにアイコンの割り当てを行います。やや癖のある手順を踏まねばなりません。
- 22行目 「ImageList」を初期化(引数は表示するイメージファイルの縦px、横px)
- 23行目 表示させたいイメージファイルを指定し「Icon」を初期化します
- 24行目 「ImageList」へ初期化した「Icon」を追加します
- 25行目 「Notebook」へ使用する「Icon」を追加済みの「ImageList」をセットします
- 27行目 「SetPageImage」でアイコンを適用します(引数はタブインデックスと「ImageList」内のインデックス)
# -*- coding: utf-8 -*-
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, u"テストフレーム", size=(300,300))
notebook = wx.Notebook(frame, wx.ID_ANY)
panel_1 = wx.Panel(notebook, wx.ID_ANY)
panel_2 = wx.Panel(notebook, wx.ID_ANY)
panel_3 = wx.Panel(notebook, wx.ID_ANY)
panel_1.SetBackgroundColour("#FF0000")
panel_2.SetBackgroundColour("#00FF00")
panel_3.SetBackgroundColour("#0000FF")
notebook.InsertPage(0, panel_1, "tab_1")
notebook.InsertPage(1, panel_2, "tab_2")
notebook.InsertPage(2, panel_3, "tab_3")
image_list = wx.ImageList(16, 16)
icon = wx.Icon("tab_3.ico", wx.BITMAP_TYPE_ICO)
image_list.AddIcon(icon)
notebook.AssignImageList(image_list)
notebook.SetPageImage(2, 0)
frame.Show()
application.MainLoop()
--実行結果--
「tab_3」にアイコンを割り当てています。

これまでに学んだSizerを組み合わせてみましょう!
▶GUI:レイアウトの組み合わせ
