wxPython: отключить вкладку ноутбука? - PullRequest
5 голосов
/ 15 августа 2011

Есть ли вообще отключить вкладку ноутбука?Как вы можете с самими виджетами?У меня есть длинный процесс, который я запускаю, и, хотя для тех, кто на него смотрит, он должен быть довольно понятным, я хочу, чтобы пользователь не мог перебирать другие вкладки до тех пор, пока процесс, который он запускает, не будет завершен.

Я не могу найти что-то в 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 ]

3 голосов
/ 15 августа 2011

Это невозможно с 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()
2 голосов
/ 15 августа 2011

Технически, в wx.Notebook нет способа отключить вкладку. Однако вы можете сделать то же самое, проверив, какая вкладка нажата, и если она «отключена», наложите вето на событие EVT_NOTEBOOK_PAGE_CHANGING или EVT_NOTEBOOK_PAGE_CHANGED. Кроме того, вы можете использовать ноутбук AUI, как указано выше. Обратите внимание, что это из библиотеки agw, а не из wx.aui. FlatNotebook также предоставляет возможность отключать вкладки. См. Пример демонстрации wxPython.

0 голосов
/ 15 июля 2014
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 и bind / enable вокруг него, чтобы избежать бесконечного зацикливания. В кодах панели должны быть wx.BeginBusyCursor (), wx.EndBusyCursor (). Затем изменение вкладки «отключено», когда приложение занято.

...