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

では実行できません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()
于 2011-08-15T06:51:53.820 に答える
2

技術的には、wx.Notebookにはタブを無効にする方法がありません。ただし、どのタブがクリックされているかを確認し、それが「無効」になっている場合は、EVT_NOTEBOOK_PAGE_CHANGINGまたはEVT_NOTEBOOK_PAGE_CHANGEDイベントを拒否することで同じことを行うことができます。または、上記のようにAUIノートブックを使用することもできます。これはagwlibからのものであり、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 に答える