Recipe11.14.Using a wxPython Notebook with Panels


Recipe 11.14. Using a wxPython Notebook with Panels

Credit: Mark Nenadov

Problem

You want to design a wxPython GUI comprised of multiple panelseach driven by a separate Python script running in the backgroundthat let the user switch back and forth (i.e., a wxPython Notebook).

Solution

Notebooks are an effective 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 feature by supplying a wxNotebook widget. Here is a "frame" class that holds a notebook and adds to it three panes, each driven by a different Python module (not shown) through a function in each module named runPanel:

from wxPython.wx import * class MainFrame(wxFrame):     #     # snipped: mainframe class attributes     #     def _ _init_ _(self, parent, id, title):         #         # snipped: frame-specific initialization         #         # Create the notebook object         self.nb = wxNotebook(self, -1,             wxPoint(0,0), wxSize(0,0), wxNB_FIXEDWIDTH)         # Populate the notebook with pages (panels), each driven by a         # separate Python module which gets imported for the purpose:         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         #

Discussion

wxPython provides a powerful notebook user-interface object, with multiple panels, each of which can be built and driven by a separate Python script (actually a module, not a "main 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.

This recipe isn't a fully functional wxPython application, but it adequately demonstrates how to use notebooks and panels (which it loads by importing files). This recipe assumes that you have files named panel1.py, panel2.py, and panel3.py, each of which contains a runPanel function that takes two arguments (a wxFrame and a wxNotebook in the frame) and returns a wxPanel object.

The notebook-specific 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), obtained by calling the separate script's runPanel functions, 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 wxWidgets framework, as wrapped by the wxPython package, handles all the rest on your behalf.

See Also

wxPython, and the wxWidgets toolkit it depends on, are described in detail at http://www.wxPython.org and http://www.wxWidgets.org.



Python Cookbook
Python Cookbook
ISBN: 0596007973
EAN: 2147483647
Year: 2004
Pages: 420

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net