2009-04-19 200 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)