wxPython 笔记本类
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 将标签置于笔记本页面下方而不是上方 |
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() 移除页面而不删除 |
该类定义的事件绑定器有:
以下是NoteBook的常用事件。
序号 | 事件及描述 |
---|---|
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()
上述代码产生以下输出: