2009-04-19 5 views
2

wx.aui.AuiNotebook으로 실험 중입니다. 특정 탭이 닫히는 것을 막을 수있는 방법이 있습니까? 즉, 사용자가 AuiNotebook에서 여러 개의 탭을 만들 수있는 앱을 가지고 있지만 처음 2 개의 탭은 시스템 관리 방식이므로 사용자가 닫지 않도록하고 싶습니다.wxAuiNotebook - 특정 탭이 닫히는 것을 방지합니다.

또한 닫기 이벤트에서 닫히는 탭에 첨부 된 창 개체를 가져올 수 있습니까? (데이터를 추출하기 위해)

답변

1

나는 사용자가 마지막 탭을 닫지 못하도록하고 싶었던 비슷한 상황이 있었다. 내가 한 일은 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) 
관련 문제