wxPython:禁用笔记本选项卡?

2024-05-26 04:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有禁用笔记本选项卡?就像你可以用这些小部件本身一样?我启动了一个很长的进程,虽然对于那些关注它的人来说它应该是非常不言自明的,但是我希望能够防止用户在其他选项卡上胡乱操作,直到它运行的进程完成为止。在

我似乎在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")

Tags: 用户selfid进程init部件def代码段
3条回答
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)

活动选项卡可以通过设置笔记本.SetSelection(). 但是事件应该是unbind/disable和bind/enable,以避免无限循环。应该有wx.BeginBusyCursor公司(), wx.EndBusyCursor公司()在面板代码中。当应用程序繁忙时,选项卡更改被禁用。在

从技术上讲,wx.笔记本无法禁用选项卡。但是,您可以通过检查单击了哪个选项卡来执行相同的操作,如果它是“禁用的”,则否决EVT_NOTEBOOK_PAGE_CHANGING或EVT_NOTEBOOK_PAGE_CHANGED事件。或者,您可以使用上面提到的AUI笔记本。请注意,这是来自agw库的,而不是来自西澳大利亚州一个。FlatNotebook还提供了禁用选项卡的功能。请参见wxPython演示以获取示例。在

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

相关问题 更多 >