- wxPython 教程
- wxPython - 首页
- wxPython - 简介
- wxPython - 环境配置
- wxPython - Hello World
- wxPython - GUI 构建工具
- wxPython - 主要类
- wxPython - 事件处理
- wxPython - 布局管理
- wxPython - 按钮
- wxPython - 可停靠窗口
- 多文档界面
- wxPython - 绘图 API
- wxPython - 拖放操作
- wxPython 资源
- wxPython - 快速指南
- wxPython - 有用资源
- wxPython - 讨论
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()
以上代码产生以下输出: