Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] - نسخه متنی

David Ascher, Alex Martelli, Anna Ravenscroft

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید







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.


/ 394