Credit: Mark Nenadov
You want to design a wxPython GUI
comprised of multiple panels—each driven by a separate Python
script running in the background—that let the user switch back
and forth (i.e., a wxPython Notebook
).
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.
wxPython, and the wxWindows toolkit it depends on, are described in detail at http://www.wxPython.org and http://www.wxWindows.org.
Get Python Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.