wx.Notebook (wxPython) | Python-izm

Notebook

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が適用され、右部にタブが表示されています。

アイコンの割り当て

指定のタブにアイコンの割り当てを行います。少し面倒な手順を踏む必要があるため、まずは処理の概要を示します。

  1. ImageListを初期化、引数は表示するイメージファイルの縦px、横px (20行目)
  2. 表示させたいイメージファイルを指定しIconを初期化します (21行目)
  3. ImageListへ初期化したIconを追加します (22行目)
  4. Notebookへ使用するIconを追加済みのImageListをセットします (23行目)
  5. 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にアイコンを割り当てています。