私は、ユーザーが最後のタブを閉じるのを防ぐために、同様の状況がありました。私がしたのは、wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE
イベントをバインドしてから、イベントハンドラで開いているタブの数を確認することでした。タブの数が2より少ない場合は、最後のタブに閉じるボタンがないように、wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
のスタイルを切り替えます。
class MyAuiNotebook(wx.aui.AuiNotebook):
def __init__(self, *args, **kwargs):
kwargs['style'] = kwargs.get('style', wx.aui.AUI_NB_DEFAULT_STYLE) & \
~wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
super(MyAuiNotebook, self).__init__(*args, **kwargs)
self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.onClosePage)
def onClosePage(self, event):
event.Skip()
if self.GetPageCount() <= 2:
# Prevent last tab from being closed
self.ToggleWindowStyle(wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
def AddPage(self, *args, **kwargs):
super(MyAuiNotebook, self).AddPage(*args, **kwargs)
# Allow closing tabs when we have more than one tab:
if self.GetPageCount() > 1:
self.SetWindowStyle(self.GetWindowStyleFlag() | \
wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)