Search code examples
pythonwxpythonwxnotebook

wxPython: Disable a notebook tab?


Is there anyway to disable a notebook tab? Like you can with the Widgets themselves? I have a long process I kick off, and while it should be pretty self-explanatory for those looking at it, I want to be able to prevent the user from mucking around in other tabs until the process it is running is complete.

I couldn't seem to find anything in wx.Notebook to help with this?

Code snippet:

def __init__(self, parent):
    wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)

    self.AddPage(launchTab.LaunchPanel(self), "Launch")
    self.AddPage(scanTab.ScanPanel(self), "Scan")
    self.AddPage(extractTab.ExtractPanel(self), "Extract")
    self.AddPage(virtualsTab.VirtualsPanel(self), "Virtuals")

Solution

  • It si not doable with wx.Notebook. But you can use some of the more advanced widgets such as wx.lib.agw.aui.AuiNotebook:

    import wx
    import wx.lib.agw.aui as aui
    
    class MainWindow(wx.Frame):
        def __init__(self, *args, **kwargs):
            wx.Frame.__init__(self, *args, **kwargs)
    
            style = aui.AUI_NB_DEFAULT_STYLE ^ aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
            self.notebook = aui.AuiNotebook(self, agwStyle=style)      
    
            self.panel1 = wx.Panel(self.notebook)
            self.panel2 = wx.Panel(self.notebook)
            self.panel3 = wx.Panel(self.notebook)
    
            self.notebook.AddPage(self.panel1, "First")
            self.notebook.AddPage(self.panel2, "Second")
            self.notebook.AddPage(self.panel3, "Third")
    
            self.notebook.EnableTab(1, False)
    
            self.Show()
    
    
    app = wx.App(False)
    win = MainWindow(None)
    app.MainLoop()