wxPython - Notebook 类



wxPython 类库包含各种“book”控件。book 控件允许用户在框架中的各个面板之间切换。当需要呈现大量数据时,这尤其有用。

Book 类继承自wx.BookCtrlBase类。以下类型的 book 控件可用:

  • wx.Notebook
  • wx.Choicebook
  • wx.Listbook
  • wx.Treebook

wx.Notebook 小部件呈现一个选项卡式控件。框架中的一个 Notebook 对象具有一个或多个选项卡(称为页面),每个选项卡都有一个面板显示控件的布局。用户可以通过点击相应的选项卡标题在页面之间切换。

Notebook 类的构造函数采用以下熟悉的参数:

wx.Notebook(parent, id, pos, size, style)

以下样式参数可用于自定义小部件:

序号 参数及说明
1

wx.NB_TOP

将选项卡放置在顶部

2

wx.NB_LEFT

将选项卡放置在左侧

3

wx.NB_RIGHT

将选项卡放置在右侧

4

wx.NB_BOTTOM

将选项卡放置在 Notebook 页面的下方,而不是上方

5

wx.NB_FIXEDWIDTH

所有选项卡都将具有相同的宽度

6

wx.NB_MULTILINE

可以有多行选项卡

Notebook 类的成员函数:

序号 函数及说明
1

OnSelChange()

页面选择更改时调用的处理程序函数

2

SetPadding()

设置每个页面图标和标签周围的空间量(以像素为单位)

3

GetSelection()

返回当前选择的页面

4

SetSelection()

将选择设置为给定的页面,并返回之前的选择

5

AddPage()

添加一个新页面

6

DeletePage()

删除给定索引的页面

7

InsertPage()

在给定索引处插入一个新选项卡

8

RemovePage()

删除页面但不删除内容

为该类定义的事件绑定器:

序号 事件及说明
1

EVT_NOTEBOOK_PAGE_CHANGED()

页面选择已更改

2

EVT_NOTEBOOK_PAGE_CHANGING()

页面选择即将更改

示例

以下示例在顶级框架中部署 Notebook 控件。

nb = wx.Notebook(self) 

设计了两个基于 wx.Panel 的类。第一个在其内放置一个多行 TextCtrl。

class MyPanel1(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel1, self).__init__(parent) 
      text = wx.TextCtrl(self, style = wx.TE_MULTILINE, size = (250,150))

第二个显示一个具有三个单选按钮的 RadioBox。

class MyPanel2(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel2, self).__init__(parent) 
      lblList = ['Value X', 'Value Y', 'Value Z']         
      rbox = wx.RadioBox(self, label = 'RadioBox', pos = (25,10), choices = lblList,
         majorDimension = 1, style = wx.RA_SPECIFY_ROWS)

这两个面板类的对象作为页面添加到顶级框架上的 Notebook 中。

nb.AddPage(MyPanel1(nb),"Editor") 
nb.AddPage(MyPanel2(nb),"RadioButtons")

完整的代码如下:

import wx
  
class MyDialog(wx.Dialog): 
   def __init__(self, parent, title): 
      super(MyDialog, self).__init__(parent, title = title, size = (250,150)) 
      panel = wx.Panel(self) 
      self.btn = wx.Button(panel, wx.ID_OK, label = "ok", size = (50,20), pos = (75,50)) 
     
class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title, size = (250,150))  
      self.InitUI() 
         
   def InitUI(self):    
      nb = wx.Notebook(self) 
      nb.AddPage(MyPanel1(nb),"Editor") 
      nb.AddPage(MyPanel2(nb),"RadioButtons") 
      self.Centre() 
      self.Show(True) 
		
class MyPanel1(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel1, self).__init__(parent) 
      text = wx.TextCtrl(self, style = wx.TE_MULTILINE, size = (250,150)) 
		
class MyPanel2(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel2, self).__init__(parent) 
      lblList = ['Value X', 'Value Y', 'Value Z']         
      rbox = wx.RadioBox(self, label = 'RadioBox', pos = (25,10), choices = lblList,
         majorDimension = 1, style = wx.RA_SPECIFY_ROWS) 
     
ex = wx.App() 
Mywin(None,'NoteBook demo') 
ex.MainLoop()

以上代码产生以下输出:

Notebook Demo Output
wxpython_major_classes.htm
广告