J'ai eu une situation similaire où je voulais empêcher l'utilisateur de fermer le dernier onglet. Ce que j'ai fait liait l'événement wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE
puis, dans le gestionnaire d'événements, vérifiais le nombre d'onglets ouverts. Si le nombre d'onglets est inférieur à deux, je bascule le style wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
pour que le dernier onglet n'ait pas de bouton de fermeture.
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)