This commit was manufactured by cvs2svn to create tag 'WX_2_2_9'.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/tags/WX_2_2_9@13364 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -35,8 +35,8 @@ wxPython is a Python package that can be imported at runtime that
|
||||
includes a collection of Python modules and an extension module
|
||||
(native code). It provides a series of Python classes that mirror (or
|
||||
shadow) many of the wxWindows GUI classes. This extension module
|
||||
attempts to mirror the class heiarchy of wxWindows as closely as
|
||||
possble. This means that there is a wxFrame class in wxPython that
|
||||
attempts to mirror the class heirarchy of wxWindows as closely as
|
||||
possible. This means that there is a wxFrame class in wxPython that
|
||||
looks, smells, tastes and acts almost the same as the wxFrame class in
|
||||
the C++ version.
|
||||
|
||||
@@ -45,17 +45,17 @@ applications, or in situations where Python is embedded in a C++
|
||||
application as an internal scripting or macro language.
|
||||
|
||||
Currently wxPython is available for Win32 platforms and the GTK
|
||||
toolkit (wxGTK) on most Unix/X-windows platforms. The effort to
|
||||
enable wxPython for wxMotif will begin shortly. See \helpref{Building Python}{wxpbuild} for
|
||||
toolkit (wxGTK) on most Unix/X-windows platforms. See the wxPython
|
||||
website \urlref{http://wxPython.org/}{http://wxPython.org/} for
|
||||
details about getting wxPython working for you.
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
\section{Why use wxPython?}\label{wxpwhy}
|
||||
|
||||
So why would you want to use wxPython over just C++ and wxWindows?
|
||||
Personally I prefer using Python for everything. I only use C++ when
|
||||
I absolutely have to eek more performance out of an algorithm, and even
|
||||
then I ususally code it as an extension module and leave the majority
|
||||
Personally I prefer using Python for everything. I only use C++ when I
|
||||
absolutely have to eek more performance out of an algorithm, and even
|
||||
then I usually code it as an extension module and leave the majority
|
||||
of the program in Python.
|
||||
|
||||
Another good thing to use wxPython for is quick prototyping of your
|
||||
@@ -80,7 +80,7 @@ This has its upsides and its downsides...
|
||||
|
||||
The upside is that Tk is a pretty versatile toolkit. It can be made
|
||||
to do a lot of things in a lot of different environments. It is fairly
|
||||
easy to create new widgets and use them interchangably in your
|
||||
easy to create new widgets and use them interchangeably in your
|
||||
programs.
|
||||
|
||||
The downside is Tcl. When using Tkinter you actually have two
|
||||
@@ -89,7 +89,7 @@ Tcl interpreter for the GUI. Since the guts of Tcl is mostly about
|
||||
string processing, it is fairly slow as well. (Not too bad on a fast
|
||||
Pentium II, but you really notice the difference on slower machines.)
|
||||
|
||||
It wasn't until the lastest version of Tcl/Tk that native Look and
|
||||
It wasn't until the latest version of Tcl/Tk that native Look and
|
||||
Feel was possible on non-Motif platforms. This is because Tk
|
||||
usually implements its own widgets (controls) even when there are
|
||||
native controls available.
|
||||
@@ -111,82 +111,11 @@ to use the GUI portions.
|
||||
\wxheading{Others}
|
||||
|
||||
There are quite a few other GUI modules available for Python, some in
|
||||
active use, some that havn't been updated for ages. Most are simple
|
||||
active use, some that haven't been updated for ages. Most are simple
|
||||
wrappers around some C or C++ toolkit or another, and most are not
|
||||
cross-platform compatible. See \urlref{this link}{http://www.python.org/download/Contributed.html\#Graphics}
|
||||
cross-platform compatible. See \urlref{this link}{http://www.python.org/download/Contributed.html\#Graphics}
|
||||
for a listing of a few of them.
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
\section{Building wxPython}\label{wxpbuild}
|
||||
|
||||
I used SWIG (\urlref{http://www.swig.org}{http://www.swig.org}) to
|
||||
to create the source code for the
|
||||
extension module. This enabled me to only have to deal with a small
|
||||
amount of code and only have to bother with the exceptional issues.
|
||||
SWIG takes care of the rest and generates all the repetative code for
|
||||
me. You don't need SWIG to build the extension module as all the
|
||||
generated C++ code is included under the src directory.
|
||||
|
||||
I added a few minor features to SWIG to control some of the code
|
||||
generation. If you want to play around with this you will need to get
|
||||
a recent version of SWIG from their CVS or from a daily build. See
|
||||
\urlref{http://www.swig.org/}{http://www.swig.org/} for details.
|
||||
|
||||
wxPython is organized as a Python package. This means that the
|
||||
directory containing the results of the build process should be a
|
||||
subdirectory of a directory on the {\tt PYTHONPATH}. (And preferably should
|
||||
be named wxPython.) You can control where the build process will dump
|
||||
wxPython by setting the {\tt TARGETDIR} variable for the build utility (see
|
||||
below).
|
||||
|
||||
\begin{enumerate}\itemsep=0pt
|
||||
\item Build wxWindows as described in its BuildCVS.txt file. For Unix
|
||||
systems I run configure with these flags:
|
||||
|
||||
\begin{verbatim}
|
||||
--with-gtk
|
||||
--with-libjpeg
|
||||
--without-odbc
|
||||
--enable-unicode=no
|
||||
--enable-threads=yes
|
||||
--enable-socket=yes
|
||||
--enable-static=no
|
||||
--enable-shared=yes
|
||||
--disable-std_iostreams
|
||||
\end{verbatim}
|
||||
|
||||
You can use whatever flags you want, but I know these work.
|
||||
|
||||
For Win32 systems I use Visual C++ 6.0, but 5.0 should work also. The
|
||||
build utility currently does not support any other Win32 compilers.
|
||||
\item At this point you may want to make an alias or symlink, script,
|
||||
batch file, whatever on the PATH that invokes {\tt \$(WXWIN)/utils/wxPython/distrib/build.py} to
|
||||
help simplify matters somewhat. For example, on my Win32 system I have a file named
|
||||
{\tt build}.bat in a directory on the PATH that contains:
|
||||
|
||||
{\tt python \%WXWIN/utils/wxPython/distrib/build.py \%1 \%2 \%3 \%4 \%5 \%6}
|
||||
\item Change into the {\tt \$(WXWIN)/utils/wxPython/src} directory.
|
||||
\item Type "{\tt build -b}" to build wxPython and "{\tt build -i}" to
|
||||
install it, or "{\tt build -bi}" to do both steps at once.
|
||||
|
||||
The build.py script actually generates a Makefile based on what it
|
||||
finds on your system and information found in the build.cfg file.
|
||||
If you have troubles building or you want it built or installed in
|
||||
a different way, take a look at the docstring in build.py. You are
|
||||
able to to override many configuration options in a file named
|
||||
build.local.
|
||||
\item To build and install the add-on modules, change to the appropriate
|
||||
directory under {\tt \$(WXWIN)/utils/wxPython/modules} and run the build
|
||||
utility again.
|
||||
\item Change to the {\tt \$(WXWIN)/utils/wxPython/demo} directory.
|
||||
\item Try executing the demo program. For example:
|
||||
|
||||
{\tt python demo.py}
|
||||
|
||||
To run it without requiring a console on Win32, you can use the
|
||||
{\tt pythonw.exe} version of Python either from the command line or from a
|
||||
shortcut.
|
||||
\end{enumerate}
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
\section{Using wxPython}\label{wxpusing}
|
||||
@@ -300,7 +229,7 @@ methods of the class. These helper functions are intended to be like
|
||||
the event table macros that wxWindows employs. But since static event
|
||||
tables are impossible with wxPython, we use helpers that are named the
|
||||
same to dynamically build the table. The only real difference is
|
||||
that the first arguemnt to the event helpers is always the window that
|
||||
that the first argument to the event helpers is always the window that
|
||||
the event table entry should be added to.
|
||||
\item Notice the use of {\tt wxDLG\_PNT} and {\tt wxDLG\_SZE} in lines 19
|
||||
- 29 to convert from dialog units to pixels. These helpers are unique
|
||||
@@ -311,14 +240,14 @@ called? The answer is, yes it does. This is because many of the
|
||||
{\em standard} events are attached to windows that have the associated
|
||||
{\em standard} method names. I have tried to follow the lead of the
|
||||
C++ classes in this area to determine what is {\em standard} but since
|
||||
that changes from time to time I can make no guarentees, nor will it
|
||||
that changes from time to time I can make no guarantees, nor will it
|
||||
be fully documented. When in doubt, use an EVT\_*** function.
|
||||
\item At lines 17 to 21 notice that there are no saved references to
|
||||
the panel or the static text items that are created. Those of you
|
||||
who know Python might be wondering what happens when Python deletes
|
||||
these objects when they go out of scope. Do they disappear from the GUI? They
|
||||
don't. Remember that in wxPython the Python objects are just shadows of the
|
||||
coresponding C++ objects. Once the C++ windows and controls are
|
||||
corresponding C++ objects. Once the C++ windows and controls are
|
||||
attached to their parents, the parents manage them and delete them
|
||||
when necessary. For this reason, most wxPython objects do not need to
|
||||
have a \_\_del\_\_ method that explicitly causes the C++ object to be
|
||||
@@ -360,6 +289,7 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxBusyCursor}{wxbusycursor}
|
||||
\item \helpref{wxButton}{wxbutton}
|
||||
\item \helpref{wxCalculateLayoutEvent}{wxcalculatelayoutevent}
|
||||
\item \helpref{wxCalendarCtrl}{wxcalendarctrl}
|
||||
\item wxCaret
|
||||
\item \helpref{wxCheckBox}{wxcheckbox}
|
||||
\item \helpref{wxCheckListBox}{wxchecklistbox}
|
||||
@@ -380,29 +310,38 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxDataObject}{wxdataobject}
|
||||
\item \helpref{wxDataObjectComposite}{wxdataobjectcomposite}
|
||||
\item \helpref{wxDataObjectSimple}{wxdataobjectsimple}
|
||||
\item \helpref{wxDateTime}{wxdatetime}
|
||||
\item \helpref{wxDateSpan}{wxdatespan}
|
||||
\item \helpref{wxDC}{wxdc}
|
||||
\item \helpref{wxDialog}{wxdialog}
|
||||
\item \helpref{wxDirDialog}{wxdirdialog}
|
||||
\item \helpref{wxDragImage}{wxdragimage}
|
||||
\item \helpref{wxDropFilesEvent}{wxdropfilesevent}
|
||||
\item \helpref{wxDropSource}{wxdropsource}
|
||||
\item \helpref{wxDropTarget}{wxdroptarget}
|
||||
\item \helpref{wxEraseEvent}{wxeraseevent}
|
||||
\item \helpref{wxEvent}{wxevent}
|
||||
\item \helpref{wxEvtHandler}{wxevthandler}
|
||||
\item wxFileConfig
|
||||
\item \helpref{wxFileDataObject}{wxfiledataobject}
|
||||
\item \helpref{wxFileDialog}{wxfiledialog}
|
||||
\item \helpref{wxFileDropTarget}{wxfiledroptarget}
|
||||
\item \helpref{wxFileSystem}{wxfilesystem}
|
||||
\item \helpref{wxFileSystemHandler}{wxfilesystemhandler}
|
||||
\item \helpref{wxFocusEvent}{wxfocusevent}
|
||||
\item \helpref{wxFontData}{wxfontdata}
|
||||
\item \helpref{wxFontDialog}{wxfontdialog}
|
||||
\item \helpref{wxFont}{wxfont}
|
||||
\item \helpref{wxFrame}{wxframe}
|
||||
\item \helpref{wxFSFile}{wxfsfile}
|
||||
\item \helpref{wxGauge}{wxgauge}
|
||||
\item wxGIFHandler
|
||||
\item wxGLCanvas
|
||||
\begin{comment}
|
||||
\item wxGridCell
|
||||
\item wxGridEvent
|
||||
\item \helpref{wxGrid}{wxgrid}
|
||||
\end{comment}
|
||||
\item \helpref{wxHtmlCell}{wxhtmlcell}
|
||||
\item \helpref{wxHtmlContainerCell}{wxhtmlcontainercell}
|
||||
\item \helpref{wxHtmlDCRenderer}{wxhtmldcrenderer}
|
||||
@@ -422,6 +361,8 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxImageList}{wximagelist}
|
||||
\item \helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}
|
||||
\item \helpref{wxInitDialogEvent}{wxinitdialogevent}
|
||||
\item \helpref{wxInputStream}{wxinputstream}
|
||||
\item wxInternetFSHandler
|
||||
\item \helpref{wxJoystickEvent}{wxjoystickevent}
|
||||
\item wxJPEGHandler
|
||||
\item \helpref{wxKeyEvent}{wxkeyevent}
|
||||
@@ -431,12 +372,13 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxListCtrl}{wxlistctrl}
|
||||
\item \helpref{wxListEvent}{wxlistevent}
|
||||
\item \helpref{wxListItem}{wxlistctrlsetitem}
|
||||
\item \helpref{wxMask}{wxmask}
|
||||
\item wxMaximizeEvent
|
||||
\item \helpref{wxMDIChildFrame}{wxmdichildframe}
|
||||
\item \helpref{wxMDIClientWindow}{wxmdiclientwindow}
|
||||
\item \helpref{wxMDIParentFrame}{wxmdiparentframe}
|
||||
\item \helpref{wxMask}{wxmask}
|
||||
\item wxMaximizeEvent
|
||||
\item \helpref{wxMemoryDC}{wxmemorydc}
|
||||
\item \helpref{wxMemoryFSHandler}{wxmemoryfshandler}
|
||||
\item \helpref{wxMenuBar}{wxmenubar}
|
||||
\item \helpref{wxMenuEvent}{wxmenuevent}
|
||||
\item \helpref{wxMenuItem}{wxmenuitem}
|
||||
@@ -466,6 +408,7 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxPrintPreview}{wxprintpreview}
|
||||
\item \helpref{wxPrinterDC}{wxprinterdc}
|
||||
\item \helpref{wxPrintout}{wxprintout}
|
||||
\item \helpref{wxProcess}{wxprocess}
|
||||
\item \helpref{wxQueryLayoutInfoEvent}{wxquerylayoutinfoevent}
|
||||
\item \helpref{wxRadioBox}{wxradiobox}
|
||||
\item \helpref{wxRadioButton}{wxradiobutton}
|
||||
@@ -504,6 +447,9 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxTextDropTarget}{wxtextdroptarget}
|
||||
\item \helpref{wxTextEntryDialog}{wxtextentrydialog}
|
||||
\item \helpref{wxTimer}{wxtimer}
|
||||
\item \helpref{wxTimerEvent}{wxtimerevent}
|
||||
\item \helpref{wxTimeSpan}{wxtimespan}
|
||||
\item \helpref{wxTipProvider}{wxtipprovider}
|
||||
\item wxToolBarTool
|
||||
\item \helpref{wxToolBar}{wxtoolbar}
|
||||
\item wxToolTip
|
||||
@@ -515,21 +461,23 @@ as possible to the C++ spec over time.
|
||||
\item \helpref{wxValidator}{wxvalidator}
|
||||
\item \helpref{wxWindowDC}{wxwindowdc}
|
||||
\item \helpref{wxWindow}{wxwindow}
|
||||
\item wxZipFSHandler
|
||||
\end{itemize}
|
||||
|
||||
%----------------------------------------------------------------------
|
||||
\section{Where to go for help}\label{wxphelp}
|
||||
|
||||
Since wxPython is a blending of multiple technologies, help comes from
|
||||
multiple sources. See
|
||||
\urlref{http://alldunn.com/wxPython}{http://alldunn.com/wxPython} for details on
|
||||
multiple sources. See
|
||||
\urlref{http://wxpython.org/}{http://wxpython.org/} for details on
|
||||
various sources of help, but probably the best source is the
|
||||
wxPython-users mail list. You can view the archive or subscribe by
|
||||
going to
|
||||
|
||||
\urlref{http://starship.python.net/mailman/listinfo/wxpython-users}{http://starship.python.net/mailman/listinfo/wxpython-users}
|
||||
\urlref{http://lists.sourceforge.net/mailman/listinfo/wxpython-users}{http://lists.sourceforge.net/mailman/listinfo/wxpython-users}
|
||||
|
||||
Or you can send mail directly to the list using this address:
|
||||
|
||||
wxpython-users@starship.python.net
|
||||
wxpython-users@lists.sourceforge.net
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user