2009-04-19 7 views
2

Я экспериментирую с wx.aui.AuiNotebook; существует ли способ предотвратить закрытие отдельных вкладок? то есть у меня есть приложение, которое позволяет пользователю создавать несколько вкладок в AuiNotebook, но первые две вкладки управляются системой, и я не хочу, чтобы они были закрыты.wxAuiNotebook - предотвращение закрытия некоторых вкладок

Кроме того, в закрытом случае, могу ли я получить объект окна, прикрепленный к закрывающей вкладке? (для извлечения данных из него)

ответ

1

У меня была аналогичная ситуация, когда я хотел запретить пользователю закрывать последнюю вкладку. То, что я сделал, было связано с событием wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, а затем в обработчике события проверялось количество открываемых вкладок. Если количество вкладок меньше двух, я переключаю стиль 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) 
Смежные вопросы