2009-04-19 16 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) 
関連する問題