NoteBook隐藏/禁用页面失败

时间:2015-07-30 14:26:18

标签: python wxpython

我在wxpython中有一个Notebook

self.book = wx.Notebook(self, -1, style=0)
self.book.AddPage(self.book_a,_("a"))
self.book.AddPage(self.book_b,_("b"))

此代码工作正常。 Evrything就是应该的。

问题是我后来遇到条件if x==1:如果确实如此,我需要隐藏/禁用book_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时,我无法在谷歌或其他地方找到。

是否有人知道问题是什么或在Hide()Disable()返回false的情况下?

1 个答案:

答案 0 :(得分:0)

wx.Notebook小部件不支持禁用网页。唯一的解决方法是检查单击哪个选项卡以及是否“禁用”,否决事件(EVT_NOTEBOOK_PAGE_CHANGING或EVT_NOTEBOOK_PAGE_CHANGED)。

虽然有另一种选择。您可以使用WN.lib.agw中的FlatNotebook小部件或AUI笔记本(wx.aui的Notebook不支持我所知道的)。它们都支持禁用选项卡的功能。 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()