タブを切り換えたときのイベント(wxNotebook)

複数の画面をタブで切り換えられるようにして並べた。画面を切り換えるときに同時に標準出力のリダイレクトを行おうとしたのであるが、どう書いたらいいのか悩んだ。

wxPythonのdemo.pyのNotebook.pyでタブを切り換えたときのイベント処理の仕方があったので、同じようにして解決できた。
タブの切り替えは、EVT_NOTEBOOK_PAGE_CHANGEDイベントで扱い、self.OnPageChanged関数と対応付ける。関数の中では、event.GetSelection()で何番目のパネルが選ばれたか判断する。これを使えば、タブで画面を切り換えるたびに何か処理を行うことができる。

コードの一部を抜粋しておく。

...(略)
       
self.Tb = wx.Notebook(self, -1, style=wx.NB_TOP)

Wind1 = wx.SplitterWindow(self.Tb, -1)
Wind2 = wx.SplitterWindow(self.Tb, -1)
Wind3 = wx.SplitterWindow(self.Tb, -1)
Wind4 = wx.SplitterWindow(self.Tb, -1)


self.Tb.AddPage(Wind1, "window #1")
self.Tb.AddPage(Wind2, "window #2")
self.Tb.AddPage(Wind3, "window #3")
self.Tb.AddPage(Wind4, "window #4")

self.Tb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)

...(略)

def OnPageChanged(self, event):
    new = event.GetSelection()
    if new == 0:
        処理1
    elif new == 1:
        処理2
    elif new == 2:
        処理3
    elif new == 3:
        処理4
    event.Skip()