|I l@ve RuBoard|
9.8 Using a wxPython Notebook with Panels
Credit: Mark Nenadov
Notebooks are a powerful GUI approach, as they let the user select the desired view from several options at any time with an instinctive button click. wxPython supports this by supplying a wxNotebook widget:
from wxPython.wx import * class MainFrame(wxFrame): # # snipped: mainframe class attributes # def _ _init_ _(self, parent, id, title): # # snipped: frame-specific initialization # # Create the notebook self.nb = wxNotebook(self, -1, wxPoint(0,0), wxSize(0,0), wxNB_FIXEDWIDTH) # Populate the notebook with pages (panels) panel_names = "First Panel", "Second Panel", "The Third One" panel_scripts = "panel1", "panel2", "panel3" for name, script in zip(panel_names, panel_scripts): # Make panel named 'name' (driven by script 'script'.py) self.module = _ _import_ _(script, globals( )) self.window = self.module.runPanel(self, self.nb) if self.window: self.nb.AddPage(self.window, name) # # snipped: rest of frame initialization #
wxPython provides a powerful notebook user-interface object, with multiple panels, each of which is built and driven by a separate Python script. Each panel's script runs in the background, even when the panel is not selected, and maintains state as the user switches back and forth.
Of course, this recipe isn't a fully functional wxPython application, but it demonstrates how to use notebooks and panels (which it loads by importing files) adequately. Of course, this recipe assumes that you have files named panel1.py, panel2.py, and panel3.py, each of which contains a runPanel function that returns a wxPanel object. The specific notebook functionality is easy: the notebook object is created by the wxNotebook function, and an instance of this recipe's MainFrame class saves its notebook object as the self.nb instance attribute. Then, each page (a wxPanel object) is added to the notebook by calling the notebook's AddPage method, with the page object as the first argument and a name string as the second. Your code only needs to make the notebook and its panels usable; the wxWindows framework, as wrapped by the wxPython package, handles all the rest on your behalf.
9.8.4 See Also
|I l@ve RuBoard|