Python 笔记本隐藏/禁用页面失败

Python 笔记本隐藏/禁用页面失败,python,wxpython,Python,Wxpython,我在wxpython有一个笔记本: self.book = wx.Notebook(self, -1, style=0) self.book.AddPage(self.book_a,_("a")) self.book.AddPage(self.book_b,_("b")) 这段代码运行良好。一切都是它应该做的 问题是,如果x==1,我有一个条件:如果是真的,我需要隐藏/禁用book\u b页面(最好禁用) 我写了这段代码: if x==1: self.book_a.Hide() 但

我在wxpython有一个
笔记本

self.book = wx.Notebook(self, -1, style=0)
self.book.AddPage(self.book_a,_("a"))
self.book.AddPage(self.book_b,_("b"))
这段代码运行良好。一切都是它应该做的

问题是,如果x==1,我有一个条件:如果是真的,我需要隐藏/禁用
book\u b
页面(最好禁用)

我写了这段代码:

if  x==1:
    self.book_a.Hide()
但是什么也没发生。然后我试着:

if  x==1:
    self.book_a.Disable()
但也没有发生什么

如果我这样做:

print self.book_a.Hide()
print self.book_a.Disable()
它回来了

False
False
我知道这意味着操作失败,这就是为什么当
Hide()
Disable()
返回False时,我看不到任何更改,但在google或其他地方找不到


有人知道问题出在哪里,或者在什么情况下
Hide()
Disable()
返回false吗?

wx.Notebook小部件不支持禁用页面。唯一的解决办法是检查正在单击哪个选项卡,如果该选项卡被“禁用”,则否决该事件(EVT_NOTEBOOK_PAGE_更改或EVT_NOTEBOOK_PAGE_更改)

不过,还有另一种选择。您可以使用FlatNotebook小部件或wx.lib.agw中的AUI笔记本(据我所知,wx.AUI的笔记本不支持此功能)。它们都支持禁用选项卡的功能。wxPython演示中有这两个小部件的示例

我这里也有这些控件的一些示例:

另见:

更新-我刚刚尝试禁用一个页面。虽然它不会阻止用户单击选项卡,但会禁用该页面上的所有控件:

import wx

########################################################################
class TabPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        text = wx.TextCtrl(self)


########################################################################
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        notebook = wx.Notebook(self)

        tab_one = TabPanel(notebook)
        notebook.AddPage(tab_one, "Tab One")

        tab_two = TabPanel(notebook)
        tab_two.Disable()
        notebook.AddPage(tab_two, "Tab Two")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)



########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Notebooks")
        panel = MainPanel(self)

        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

如果不支持此操作,为什么可以从菜单中选择此功能?它有文档和所有东西。你指的是什么菜单?当我键入
self.book\u a.
时,菜单上有一些可靠的函数,它们的描述就在上面<代码>隐藏()和
禁用()
都有。那么,如果这些选项不适用于笔记本电脑,为什么它会让我看到它们呢?正如我提到的,
Disable
可以工作,但它只是禁用页面的小部件。这个小部件继承自
窗口
,因此它确实有
隐藏
,但我不确定它是否一定按照您希望的方式工作。