簡體   English   中英

wxPython:禁用筆記本選項卡?

[英]wxPython: Disable a notebook tab?

無論如何要禁用筆記本選項卡? 就像您可以使用小部件本身一樣? 我開始了一個漫長的過程,雖然對於那些查看它的人來說應該是不言自明的,但我希望能夠防止用戶在其他選項卡中亂搞,直到它正在運行的過程完成。

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

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

從技術上講,wx.Notebook 沒有辦法禁用選項卡。 但是,您可以通過檢查單擊哪個選項卡來執行相同的操作,如果它被“禁用”,則否決 EVT_NOTEBOOK_PAGE_CHANGING 或 EVT_NOTEBOOK_PAGE_CHANGED 事件。 或者,您可以使用上面提到的 AUI 筆記本。 請注意,這是來自 agw 庫的那個,而不是來自 wx.aui 的那個。 FlatNotebook 還提供禁用選項卡的功能。 有關示例,請參見 wxPython 演示。

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()。 然后當應用程序繁忙時,選項卡更改被“禁用”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM