2009-04-19 7 views
2

J'expérimente wx.aui.AuiNotebook; y a-t-il un moyen d'empêcher la fermeture de certains onglets? C'est-à-dire que j'ai une application qui permet à l'utilisateur de créer plusieurs onglets dans un AuiNotebook, mais les 2 premiers onglets sont gérés par le système et je ne veux pas qu'ils soient fermés.wxAuiNotebook - empêcher la fermeture de certains onglets

Également, dans un événement de fermeture, puis-je faire fermer l'objet fenêtre attaché à l'onglet? (pour en extraire des données)

Répondre

1

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) 
Questions connexes