5

无论如何要禁用笔记本选项卡?就像您可以使用小部件本身一样?我开始了一个漫长的过程,虽然对于那些正在查看它的人来说应该是不言自明的,但我希望能够防止用户在其他选项卡中乱搞,直到它正在运行的过程完成。

我似乎无法找到任何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")
4

3 回答 3

3

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()
于 2011-08-15T06:51:53.820 回答
2

从技术上讲,wx.Notebook 没有办法禁用选项卡。但是,您可以通过检查单击哪个选项卡来执行相同的操作,如果它被“禁用”,则否决 EVT_NOTEBOOK_PAGE_CHANGING 或 EVT_NOTEBOOK_PAGE_CHANGED 事件。或者,您可以使用上面提到的 AUI 笔记本。请注意,这是来自 agw 库的那个,而不是来自 wx.aui 的那个。FlatNotebook 还提供禁用选项卡的功能。有关示例,请参见 wxPython 演示。

于 2011-08-15T14:27:05.843 回答
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()。然后当应用程序繁忙时,选项卡更改被“禁用”。

于 2014-07-15T03:48:14.970 回答