实战wxPython:048 - Book控件(第二部分)

从前面的文章中,我们已经了解了几种book类控件,它们分别是wx.Notebook(最常用),wx.Choisebook,wx.Listbook,wx.Toolbook和wx.TreeBook,在本文中,我们将继续介绍几种book类控件wx.aui.AuiNotebook,AGW包中的FlatNotebook和AuiNotebook控件

演示所需要的页面,我们继续使用panelOne,panelTwo和panelThree。

一、wx.aui.AuiNotebook

wx.aui.AuiNotebook是wxAUI类框架的一部分,管理多个带有相关选项卡的窗口。

wx.aui.AuiNotebook是一个选项卡控件,它实现了应用程序中常用的可停靠窗格的许多特性。具体来说,wx.aui.AuiNotebook实现了允许用户通过拖放重新排列选项卡顺序的功能,将选项卡窗口拆分为许多不同的拆分器配置,并在不同的主题之间切换以自定义控件的外观。

wx.aui.AuiNotebook支持的窗口样式

  • wx.AUI_NB_DEFAULT_STYLE:等同于wx.AUI_NB_TOP|wx.AUI_NB_TAB_SPLIT |wx.AUI_NB_TAB_MOVE|wx.AUI_NB_SCROLL_BUTTONS|wx.AUI_NB_CLOSE_ON_ACTIVE_TAB| wx.AUI_NB_MIDDLE_CLICK_CLOSE。
  • wx.AUI_NB_TAB_SPLIT:允许通过拖动选项卡来分割选项卡控件。
  • wx.AUI_NB_TAB_MOVE:允许通过拖动来水平移动选项卡。
  • wx.AUI_NB_TAB_EXTERNAL_MOVE:允许将一个选项卡移动到另一个选项卡控件。
  • wx.AUI_NB_TAB_FIXED_WIDTH:使用这种样式,所有制表符具有相同的宽度。
  • wx.AUI_NB_SCROLL_BUTTONS:使用此样式,将显示左右滚动按钮。
  • wx.AUI_NB_WINDOWLIST_BUTTON:使用此样式,可以使用窗口的下拉列表。
  • wx.AUI_NB_CLOSE_BUTTON:使用此样式,选项卡栏上有一个关闭按钮。
  • wx.AUI_NB_CLOSE_ON_ACTIVE_TAB:使用此样式,关闭按钮在活动选项卡上可见。
  • wx.AUI_NB_CLOSE_ON_ALL_TABS:使用这种样式,关闭按钮在所有选项卡上都可见。
  • wx.AUI_NB_MIDDLE_CLICK_CLOSE:使用此样式,在一个选项卡上中单击关闭该选项卡。
  • wx.AUI_NB_TOP:使用这种风格,标签沿着顶部绘制。
  • wx.AUI_NB_BOTTOM:使用这种风格,标签沿着底部绘制。

wx.aui.AuiNotebook发出的事件

  • EVT_AUINOTEBOOK_PAGE_CLOSE:页面即将关闭时发出。
  • EVT_AUINOTEBOOK_PAGE_CLOSED:页面关闭后发出。
  • EVT_AUINOTEBOOK_PAGE_CHANGED:页面选择后发生改变时发出。
  • EVT_AUINOTEBOOK_PAGE_CHANGING:页面选择发生改变时发出。
  • EVT_AUINOTEBOOK_BUTTON:已按下窗口列表按钮时发出。
  • EVT_AUINOTEBOOK_BEGIN_DRAG:开始拖动后发出。
  • EVT_AUINOTEBOOK_END_DRAG:拖动结束后发出。
  • EVT_AUINOTEBOOK_DRAG_MOTION:在拖放操作期间发出。
  • EVT_AUINOTEBOOK_ALLOW_DND:是否允许使用Tab键拖动时发出。
  • EVT_AUINOTEBOOK_DRAG_DONE:通知选项卡已被拖动时发出。
  • EVT_AUINOTEBOOK_TAB_MIDDLE_DOWN:在Tab标签上按下鼠标中键时发出。
  • EVT_AUINOTEBOOK_TAB_MIDDLE_UP:在Tab标签上释放鼠标中键时发出。
  • EVT_AUINOTEBOOK_TAB_RIGHT_DOWN:在Tab标签上按下鼠标右键时发出。
  • EVT_AUINOTEBOOK_TAB_RIGHT_UP:在Tab标签上释放鼠标右键时发出。
  • EVT_AUINOTEBOOK_BG_DCLICK:双击Tab标签背景区域时发出。

wx.aui.AuiNotebook常用方法

  • AddPage (self, page, caption, select=False, bitmap=BitmapBundle()):添加页面。如果select参数为True,调用它将生成一个页面更改事件。
  • AddPage (self, page, text, select, imageId):添加一个新页面。页面必须将选项卡控件本身作为父控件,并且以前不能添加到此控件中。调用此方法可能会生成页面更改事件。
  • DeleteAllPages(self):删除所有页面。
  • DeletePage(selfpage):删除指定页面。
  • GetPage(selfpage_idx):获取指定索引的页面。
  • GetPageCount(self):获取选项卡中的页面数。
  • InsertPage (self, index, page, text, select, imageId):在指定位置插入一个新的页面。

二、wx.aui.AuiNotebook演示

#wx.aui.AuiNotebook

import wx
import wx.aui
import panelOne, panelTwo, panelThree

class MyPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        #创建AuiNotebook实例
        nb = wx.aui.AuiNotebook(self)

        pages = [(panelOne.TabPanel(self), "页面一"),
                 (panelTwo.TabPanel(self), "页面二"),
                 (panelThree.TabPanel(self), "页面三")]

        for page,label in pages:
            nb.AddPage(page, label)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(nb, 1, wx.EXPAND)
        self.SetSizer(sizer)

class SampleAuiNotebook(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleAuiNotebook, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        self.SetTitle("实战wxPython: AuiNotebook演示")
        self.SetSize(600, 400)

        panel = MyPanel(self)

        self.Centre()

def main():
    app = wx.App()
    sample = SampleAuiNotebook(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

上面的例子通过对wx.aui. AuiNotebook(self)实例化并传入一个wx.Panel来创建一个AuiNotebook实例。然后使用AuiNotebook的AddPage()方法添加了一些页面。注意,可以通过单击其单个“x”来关闭任何选项卡。

 图1:wx.aui.AuiNotebook演示

三、wx.lib.agw.flatnotebook.FlatNotebook

AGW中FlatNotebook是Notebook的完整实现,旨在成为Notebook的替代品。API函数是相似的,因此可以期望函数以相同的方式运行。

FlatNotebook具有以下一些特点:

  • 按钮以火狐风格高亮显示。
  • 滚动以大量的标签完成(所以,滚动更快,更好)。
  • 按钮区域永远不会被选项卡覆盖。
  • 它是一个通用控件。
  • 鼠标中键点击可以用来关闭标签。
  • 为选项卡添加右键菜单的函数(简单如SetRightClickMenu)。
  • 所有样式都有底部样式(它们可以在屏幕底部绘制)。
  • 隐藏“X”按钮或导航按钮(单独)的选项。
  • 所选选项卡和边框的渐变着色。
  • 支持拖放标签,无论是在同一Notebook或另一个Notebook。
  • 在活动标签上可以直接有关闭按钮。
  • 支持禁用标签。
  • 活动/非活动标签和标题的颜色设置。
  • 支持以“列/行模式”显示页面,这意味着所有页面将以“平铺”模式显示,而选项卡是隐藏的。
  • 可能添加一个自定义面板,以显示徽标或HTML文档或任何你喜欢的。

四、FlatNotebook演示

#wx.lib.agw.flatnotebook.FlatNotebook

import wx
import wx.lib.agw.flatnotebook as fnb
import panelOne, panelTwo, panelThree

class MyFlatNotebook(fnb.FlatNotebook):

    def __init__(self, parent):
        fnb.FlatNotebook.__init__(self, parent)

        pageOne = panelOne.TabPanel(self)
        pageTwo = panelTwo.TabPanel(self)
        pageThree = panelThree.TabPanel(self)
        
        self.AddPage(pageOne, "页面一")
        self.AddPage(pageTwo, "页面二")
        self.AddPage(pageThree, "页面三")

class SampleFlatNotebook(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleFlatNotebook, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        self.SetTitle("实战wxPython: FlatNotebook演示")
        self.SetSize(600, 400)
        
        panel = wx.Panel(self)

        notebook = MyFlatNotebook(panel)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.EXPAND|wx.ALL, 5)

        panel.SetSizer(sizer)
        self.Layout()

        self.Centre()

def main():
    app = wx.App()
    sample = SampleFlatNotebook(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上面的代码,可以发现FlatNotebook允许用户重新排列选项卡,关闭选项卡,它还包括一些上/下一按钮,以防有太多的选项卡无法一次性在屏幕上显示。

 图2:AGW包中FlatNotebook演示

五、wx.lib.agw.aui.AuiNotebook

AGW中AuiNotebook是wx.aui.AuiNotebook的完整实现,可以看作是wx.aui.AuiNotebook的替代品。

#wx.lib.agw.aui.AuiNotebook

import wx
import wx.lib.agw.aui as aui

class MyTabPanel(wx.Panel):
    
    def __init__(self, parent):
        wx.Panel.__init__(self, parent = parent, id = wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        textOne = wx.TextCtrl(self, wx.ID_ANY, "")
        textTwo = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(textOne, 0, wx.ALL, 5)
        sizer.Add(textTwo, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class SampleAuiNotebook(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleAuiNotebook, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        self.SetTitle("实战wxPython: AuiNotebook演示")
        self.SetSize(600, 400)

        self._mgr = aui.AuiManager()

        # tell AuiManager to manage this frame
        self._mgr.SetManagedWindow(self)

        notebook = aui.AuiNotebook(self)
        panelOne = MyTabPanel(notebook)
        panelTwo = MyTabPanel(notebook)

        notebook.AddPage(panelOne, "页面一", False)
        notebook.AddPage(panelTwo, "页面二", False)

        self._mgr.AddPane(notebook, aui.AuiPaneInfo().Name("notebook_content").CenterPane().PaneBorder(False))

        self._mgr.Update()

        self.Centre()

def main():
    app = wx.App()
    sample = SampleAuiNotebook(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

AGW包中的AuiNotebook和aui.AuiNotbook有一定的区别,它需要一个AuiManager对象。第一步是实例化AuiManager,然后通过它的SetManagedWindow()方法给它一个要管理的框架,然后添加AGW的AuiNotebook对象。

 图3:AGW包中AuiNotebook演示

六、本文知识点

  • 了解和使用wx.AuiNotebook。
  • 了解和使用wx.lib.agw.flatnotebook.FlatNotebook。
  • 了解和使用wx.lib.agw.aui.AuiNotebook。

前一篇:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值