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にアイコンを割り当てています。