我在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的情况下?
答案 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()