AGW Logo

agw_title flatnotebook

FlatNotebook is a full, generic and owner-drawn implementation of wx.Notebook.

description Description

FlatNotebook is a full implementation of the wx.Notebook, and designed to be a drop-in replacement for wx.Notebook. The API functions are similar so one can expect the function to behave in the same way.

Some features:

  • The buttons are highlighted a la Firefox style;
  • The scrolling is done for bulks of tabs (so, the scrolling is faster and better);
  • The buttons area is never overdrawn by tabs (unlike many other implementations I saw);
  • It is a generic control;
  • Currently there are 6 different styles - VC8, VC 71, Standard, Fancy, Firefox 2 and Ribbon;
  • Mouse middle click can be used to close tabs;
  • A function to add right click menu for tabs (simple as SetRightClickMenu);
  • All styles has bottom style as well (they can be drawn in the bottom of screen);
  • An option to hide ‘X’ button or navigation buttons (separately);
  • Gradient colouring of the selected tabs and border;
  • Support for drag ‘n’ drop of tabs, both in the same notebook or to another notebook;
  • Possibility to have closing button on the active tab directly;
  • Support for disabled tabs;
  • Colours for active/inactive tabs, and captions;
  • Background of tab area can be painted in gradient (VC8 style only);
  • Colourful tabs - a random gentle colour is generated for each new tab (very cool, VC8 style only);
  • Support for showing pages in “column/row mode”, which means that all the pages will be shown in “tile” mode while the tabs are hidden;
  • Possibility to add a custom panel to show a logo or HTML documentation or whatever you like when there are no pages left in FlatNotebook;
  • Try setting the tab area colour for the Ribbon Style.

And much more.

usage Usage

Usage example:

import wx
import wx.lib.agw.flatnotebook as fnb

class MyFrame(wx.Frame):

    def __init__(self, parent):

        wx.Frame.__init(self, parent, -1, "FlatNotebook Demo")

        panel = wx.Panel(self)

        notebook = fnb.FlatNotebook(panel, -1)

        for i in xrange(3):
            caption = "Page %d"%(i+1)
            notebook.AddPage(self.CreatePage(notebook, caption), caption)

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

    def CreatePage(self, notebook, caption):
        Creates a simple `wx.Panel` containing a `wx.TextCtrl`.

        :param `notebook`: an instance of `FlatNotebook`;
        :param `caption`: a simple label.

        p = wx.Panel(notebook)
        wx.StaticText(p, -1, caption, (20,20))
        wx.TextCtrl(p, -1, "", (20,40), (150,-1))
        return p

# our normal wxApp-derived class, as usual

app = wx.PySimpleApp()

frame = MyFrame(None)


This code snippet can be downloaded, see this example script.


Some of the AGW snippets of code in the documentation use images and external files (to create bitmaps or access external data). As these files are not provided in these snippets, you should make the approriate modifications to the code to actually run it.

styles Window Styles

This class supports the following window styles:

Window styles for flatnotebook
Window Styles Hex Value Description
FNB_VC71 0x1 Use Visual Studio 2003 (VC7.1) style for tabs.
FNB_FANCY_TABS 0x2 Use fancy style - square tabs filled with gradient colouring.
FNB_TABS_BORDER_SIMPLE 0x4 Draw thin border around the page.
FNB_NO_X_BUTTON 0x8 Do not display the ‘X’ button.
FNB_NO_NAV_BUTTONS 0x10 Do not display the right/left arrows.
FNB_MOUSE_MIDDLE_CLOSES_TABS 0x20 Use the mouse middle button for cloing tabs.
FNB_BOTTOM 0x40 Place tabs at bottom - the default is to place them at top.
FNB_NODRAG 0x80 Disable dragging of tabs.
FNB_VC8 0x100 Use Visual Studio 2005 (VC8) style for tabs.
FNB_X_ON_TAB 0x200 Place ‘X’ close button on the active tab.
FNB_BACKGROUND_GRADIENT 0x400 Use gradients to paint the tabs background.
FNB_COLOURFUL_TABS 0x800 Use colourful tabs (VC8 style only).
FNB_DCLICK_CLOSES_TABS 0x1000 Style to close tab using double click.
FNB_SMART_TABS 0x2000 Use Smart Tabbing, like Alt + Tab on Windows.
FNB_DROPDOWN_TABS_LIST 0x4000 Use a dropdown menu on the left in place of the arrows.
FNB_ALLOW_FOREIGN_DND 0x8000 Allows drag ‘n’ drop operations between different FlatNotebook.
FNB_HIDE_ON_SINGLE_TAB 0x10000 Hides the Page Container when there is one or fewer tabs.
FNB_DEFAULT_STYLE 0x10020 FlatNotebook default style.
FNB_FF2 0x20000 Use Firefox 2 style for tabs.
FNB_NO_TAB_FOCUS 0x40000 Does not allow tabs to have focus.
FNB_RIBBON_TABS 0x80000 Use the Ribbon Tabs style
FNB_HIDE_TABS 0x100000 Hides the Page Container allowing only keyboard navigation
FNB_NAV_BUTTONS_WHEN_NEEDED 0x200000 Hides the navigation left/right arrows if all tabs fit

events Events Processing

This class processes the following events:

Events processing for flatnotebook
Event Name Description
EVT_FLATNOTEBOOK_PAGE_CHANGED Notify client objects when the active page in FlatNotebook has changed.
EVT_FLATNOTEBOOK_PAGE_CHANGING Notify client objects when the active page in FlatNotebook is about to change.
EVT_FLATNOTEBOOK_PAGE_CLOSED Notify client objects when a page in FlatNotebook has been closed.
EVT_FLATNOTEBOOK_PAGE_CLOSING Notify client objects when a page in FlatNotebook is closing.
EVT_FLATNOTEBOOK_PAGE_CONTEXT_MENU Notify client objects when a pop-up menu should appear next to a tab.
EVT_FLATNOTEBOOK_PAGE_DROPPED Notify client objects when a tab has been dropped and re-arranged (on the same notebook)
EVT_FLATNOTEBOOK_PAGE_DROPPED_FOREIGN Notify client objects when a tab has been dropped and re-arranged (from a foreign notebook)

license License And Version

FlatNotebook is distributed under the wxPython license.

Latest Revision: Andrea Gavana @ 26 Oct 2011, 21.00 GMT

Version 3.2

Module author: Andrea Gavana <>

hierarchy Inheritance Diagram

Inheritance diagram for module: flatnotebook

Inheritance diagram of flatnotebook.FNBDragInfo, flatnotebook.FNBDropSource, flatnotebook.FNBDropTarget, flatnotebook.FNBRenderer, flatnotebook.FNBRendererDefault, flatnotebook.FNBRendererFancy, flatnotebook.FNBRendererFirefox2, flatnotebook.FNBRendererMgr, flatnotebook.FNBRendererRibbonTabs, flatnotebook.FNBRendererVC71, flatnotebook.FNBRendererVC8, flatnotebook.FlatNotebook, flatnotebook.FlatNotebookCompatible, flatnotebook.FlatNotebookDragEvent, flatnotebook.FlatNotebookEvent, flatnotebook.PageContainer, flatnotebook.PageInfo, flatnotebook.TabNavigatorWindow

svn_main SVN Revisions

A graphical representation of the SVN commits in the last year.

Click on any date in the picture to jump to that particular revision page, containing information about committers, log messages and SVN diffs.


Revision Graph For flatnotebook

2to3 Python 3 Issues (via 2to3)

No issues have been detected by