wxPythonでタブ化して表示する場合は、Notebookを使用します。スッキリとしたレイアウトが実現出来るので、要素の数が多い場合やグループ化した方が良い場合などのケースで役に立つでしょう。
タブの追加
16行目から18行目でそれぞれ別のパネルをNotebookへ追加し、タブ化して表示しています。InsertPageの引数は、タブインデックス、追加部品、タブ名称の順番です。
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', 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が適用され、タブは上部に表示されます。
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', 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が適用され、右部にタブが表示されています。

アイコンの割り当て
指定のタブにアイコンの割り当てを行います。少し面倒な手順を踏む必要があるため、まずは処理の概要を示します。
- ImageListを初期化、引数は表示するイメージファイルの縦px、横px (20行目)
- 表示させたいイメージファイルを指定しIconを初期化します (21行目)
- ImageListへ初期化したIconを追加します (22行目)
- Notebookへ使用するIconを追加済みのImageListをセットします (23行目)
- SetPageImageでアイコンを適用します、引数はタブインデックスとImageList内のインデックス (25行目)
import wx
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', 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.Add(icon)
notebook.AssignImageList(image_list)
notebook.SetPageImage(2, 0)
frame.Show()
application.MainLoop()
tab_3にアイコンを割り当てています。

