2011-08-14 44 views
5

无论如何禁用笔记本选项卡?喜欢你可以与小工具本身?我开始了一个漫长的过程,虽然对于那些想看它的人来说这应该是不言而喻的,但我希望能够防止用户在其他选项卡中混淆,直到它正在运行的进程完成。wxPython:禁用笔记本选项卡?

我似乎无法找到wx.Notebook的任何帮助吗?

代码片段:

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") 

回答

3

这对与wx.Notebook不可行。但是你可以使用一些更先进的部件,如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() 
+0

工作,但在风格上,它为我创造了其他问题('aui.AuiNotebook'和'wx.FlatNotebook')。最终坚持使用旧的wx.Notebook。不过谢谢。 – chow

2

技术上,wx.Notebook没有一种方法来禁用标签。但是,您可以通过检查点击哪个选项卡来执行相同的操作,并且如果它被“禁用”,则拒绝EVT_NOTEBOOK_PAGE_CHANGING或EVT_NOTEBOOK_PAGE_CHANGED事件。或者,您可以使用上述的AUI笔记本。请注意,这是来自agw lib的,不是来自wx.aui的。 FlatNotebook还提供禁用标签的功能。查看wxPython演示示例。

0
class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     p = wx.Panel(self) 
     self.nb = wx.Notebook(p) 
     ...... 

     self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) 

    def OnPageChanged(self, event): 
     if wx.IsBusy(): 
      self.Unbind(wx.EVT_NOTEBOOK_PAGE_CHANGED) 
      self.nb.SetSelection(event.GetOldSelection()) 
      self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) 

活动标签可以通过Notebook.SetSelection()来设置。但事件应该是未绑定的/禁用并绑定/启用它以避免无限循环。面板代码中应该有wx.BeginBusyCursor(),wx.EndBusyCursor()。然后当应用程序忙时,标签更改为“禁用”。

+0

我有与wx.Listbook相同的问题,并使用aGuegu答案,但为了避免递归,而不是SetSelection和解除绑定和绑定,简单使用ChangeSelection,它不会生成页面更改事件。 – dhiga

相关问题