无论如何禁用笔记本标签?就像你可以使用Widgets本身一样?我开始了很长的过程,虽然看起来应该是非常明显的,但我希望能够防止用户在其他标签中乱窜,直到它运行的过程完成。
我似乎无法找到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")
答案 0 :(得分: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()
答案 1 :(得分:2)
从技术上讲,wx.Notebook没有办法禁用标签。但是,您可以通过检查单击哪个选项卡以及是否“禁用”来执行相同的操作,否决EVT_NOTEBOOK_PAGE_CHANGING或EVT_NOTEBOOK_PAGE_CHANGED事件。或者,您可以使用上面提到的AUI笔记本。请注意,这是来自agw lib的那个,而不是来自wx.aui的那个。 FlatNotebook还提供禁用选项卡的功能。有关示例,请参阅wxPython演示。
答案 2 :(得分: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()设置活动选项卡。但是事件应该是unbinded / disable并且在它周围绑定/启用以避免无限循环。面板代码中应该有wx.BeginBusyCursor(),wx.EndBusyCursor()。然后,当应用程序忙时,“禁用”选项卡更改。