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