Other little docs tweaks, and added HTML versions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25509 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-02-04 23:39:15 +00:00
parent c8000995b5
commit 8eda5e3588
17 changed files with 4248 additions and 110 deletions

327
wxPython/docs/BUILD.html Normal file
View File

@@ -0,0 +1,327 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>Building wxPython 2.5 for Development and Testing</title>
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="building-wxpython-2-5-for-development-and-testing">
<h1 class="title">Building wxPython 2.5 for Development and Testing</h1>
<p>This file describes how I build wxWindows and wxPython while doing
development and testing, and is meant to help other people that want
to do the same thing. I'll assume that you are using either a CVS
snapshot from <a class="reference" href="http://wxwindows.org/snapshots/">http://wxwindows.org/snapshots/</a>, a checkout from CVS, or
one of the released wxPythonSrc-2.5.* tarballs. I'll also assume that
you know your way around your system, the compiler, etc. and that you
know what you are doing! ;-)</p>
<p>If you want to also install the version of wxPython you build to be in
your site-packages dir and be your default version of wxPython, then a
few additional steps are needed, and you may want to use slightly
different options. See INSTALL.txt for more details. If you only use
the instructions in this BUILD.txt file then you will end up with a
separate installation of wxPython and you can switch back and forth
between this and the release version that you may already have
installed.</p>
<p>If you want to make changes to any of the <tt class="literal"><span class="pre">*.i</span></tt> files, (SWIG interface
definition files,) or to regenerate the extension sources or renamer
modules, then you will need an up to date version of SWIG. Either get
and build the current CVS version, or version 1.3.20, and then apply
the patches in wxPython/SWIG. See the README.txt in that dir for
details about each patch and also info about those that may already
have been applied to the SWIG sources. If you install this build of
SWIG to a location that is not on the PATH (so it doesn't interfere
with an existing SWIG install for example) then you can set a setup.py
command-line variable named SWIG to be the full path name of the
executable and the wxPython build will use it. See below for an
example.</p>
<div class="section" id="building-on-unix-like-systems-e-g-linux-and-os-x">
<h1><a name="building-on-unix-like-systems-e-g-linux-and-os-x">Building on Unix-like Systems (e.g. Linux and OS X)</a></h1>
<p>These platforms are built almost the same way while in development
so I'll combine the descriptions about their build process here.
First we will build wxWindows and install it to an out of the way
place, then do the same for wxPython.</p>
<ol class="arabic">
<li><p class="first">Create a build directory in the main wxWindows dir, and configure
wxWindows. If you want to have multiple builds with different
configure options, just use different subdirectories. I normally
put the configure command in a script named &quot;.configure&quot; in each
build dir so I can easily blow away everything in the build dir and
rerun the script without having to remember the options I used
before:</p>
<pre class="literal-block">
mkdir bld
cd bld
../configure --prefix=/opt/wx/2.5 \
--with-gtk \
--with-opengl \
--disable-monolithic \
--enable-debug \
--enable-geometry \
</pre>
<p>On OS X of course you'll want to use --with-mac instead of
--with-gtk. For GTK2 and unicode add:</p>
<blockquote>
<p>--enable-gtk2 --enable-unicode </p>
</blockquote>
<p>Notice that I used a prefix of /opt/wx/2.5. You can use whatever
path you want, such as a path in your HOME dir or even one of the
standard prefix paths such as /usr or /usr/local if you like, but
using /opt this way lets me easily have multiple versions and ports
of wxWindows &quot;installed&quot; and makes it easy to switch between them,
without impacting any versions of wxWindows that may have been
installed via an RPM or whatever. For the rest of the steps below
be sure to also substitute &quot;/opt/wx/2.5&quot; with whatever prefix you
choose for your build.</p>
<p>If you want to use the image and zlib libraries included with
wxWindows instead of those already installed on your system, (for
example, to reduce dependencies on 3rd party libraries) then you
can add these flags to the configure command:</p>
<pre class="literal-block">
--with-libjpeg=builtin \
--with-libpng=builtin \
--with-libtiff=builtin \
--with-zlib=builtin \
</pre>
</li>
<li><p class="first">To build and install wxWindows you could just use the &quot;make&quot;
command but there are other libraries besides the main wxWindows
libs that also need to be built so again I make a script to do it
all for me so I don't forget anything. This time it is called
&quot;.make&quot; (I use the leading &quot;. so when I do <tt class="literal"><span class="pre">rm</span> <span class="pre">-r</span> <span class="pre">*</span></tt> in my build
dir I don't lose my scripts too.) This is what it looks like:</p>
<pre class="literal-block">
make $* \
&amp;&amp; make -C contrib/src/gizmos $* \
&amp;&amp; make -C contrib/src/ogl CXXFLAGS=&quot;-DwxUSE_DEPRECATED=0&quot; $* \
&amp;&amp; make -C contrib/src/stc $* \
&amp;&amp; make -C contrib/src/xrc $*
</pre>
<p>So you just use .make as if it where make, but don't forget to set
the execute bit on .make first!:</p>
<pre class="literal-block">
.make
.make install
</pre>
<p>When it's done you should have an installed set of files under
/opt/wx/2.5 containing just wxWindows. Now to use this version of
wxWindows you just need to add /opt/wx/2.5/bin to the PATH and set
LD_LIBRARY_PATH (or DYLD_LIBRARY_PATH on OS X) to /opt/wx/2.5/lib.</p>
</li>
<li><p class="first">I also have a script to help me build wxPython and it is checked in
to the CVS as wxWindows/wxPython/b, but probably don't want to use
it as it's very cryptic and expects that you want to run SWIG, so
if you don't have the latest patched up version of SWIG then you'll
probably get stuck. So I'll just give the raw commands instead.</p>
<p>We're not going to install the development version of wxPython with
these commands, so it won't impact your already installed version
of the latest release. You'll be able test with this version when
you want to, and use the installed release version the rest of the
time. If do want to install the development verison please read
INSTALL.txt.</p>
<p>If you have more than one version of Python on your system then be
sure to use the version of Python that you want to use when running
wxPython programs to run the setup.py commands below. I'll be
using python2.3.</p>
<p>Make sure that the first wx-config found on the PATH is the one you
installed above, and then change to the wxWindows/wxPython dir and
run the this command:</p>
<pre class="literal-block">
cd wxPython
python2.3 setup.py build_ext --inplace --debug
</pre>
<p>If your new wx-config script is not on the PATH, or there is some
other version of it found first, then you can add this to the
command line to ensure your new one is used instead:</p>
<pre class="literal-block">
WX_CONFIG=/opt/wx/2.5/bin/wx-config
</pre>
<p>If you are building with GTK2 then add the following flags to the
command line:</p>
<pre class="literal-block">
WXPORT=gtk2 UNICODE=1
</pre>
<p>If you are wanting to have the source files regenerated with swig,
then you need to turn on the USE_SWIG flag and optionally tell it
where to find the new swig executable, so add these flags:</p>
<pre class="literal-block">
USE_SWIG=1 SWIG=/opt/swig/bin/swig
</pre>
<p>If you get errors about wxGLCanvas or being unable to find libGLU
or something like that then you can add BUILD_GLCANVAS=0 to the
setup.py command line to disable the building of the glcanvas
module.</p>
<p>When the setup.py command is done you should have fully populated
wxPython and wx packages locally in wxWindows/wxPython/wxPython and
.../wx, with all the extension modules (<tt class="literal"><span class="pre">*.so</span></tt> files) located in the
wx package.</p>
</li>
<li><p class="first">To run code with the development verison of wxPython, just set the
PYTHONPATH to the wxPython dir in the CVS tree. For example:</p>
<pre class="literal-block">
export LD_LIBRARY=/opt/wx/2.5/lib
export PYTHONPATH=/myprojects/wxWindows/wxPython
cd /myprojects/wxWindows/wxPython/demo
python2.3 demo.py
</pre>
<p>OS X NOTE: You need to use &quot;pythonw&quot; on the command line to run
wxPython applications. This version of the Python executable is
part of the Python Framework and is allowed to interact with the
display. You can also Double Click on a .py or a .pyw file from
the finder (assuming that PythonLauncher is still associated with
these file extensions) and it will launch the Framework version of
Python for you. For information about creating Applicaiton Bundles
of your wxPython apps please see the wiki and the mail lists.</p>
<p>SOLARIS NOTE: If you get unresolved symbol errors when importing
wxPython and you are running on Solaris and building with gcc, then
you may be able to work around the problem by uncommenting a bit of
code in setup.py and building again. Look for 'SunOS' in setup.py
and uncomment the block containing it. The problem is that Sun's ld
does not automatically add libgcc to the link step.</p>
</li>
</ol>
</div>
<div class="section" id="building-on-windows">
<h1><a name="building-on-windows">Building on Windows</a></h1>
<p>The Windows builds currently require the use of Microsoft Visual C++.
Theoretically, other compilers (such as mingw32 or the Borland
compilers) can also be used but I've never done the work to make that
happen. If you want to try that then first you'll want to find out if
there are any tricks that have to be done to make Python extension
modules using that compiler, and then make a few changes to setup.py
to accomodate that. (And send the patches to me.) If you plan on
using VisualStudio.Net (a.k.a. MSVC 7.1) keep in mind that you'll also
have to build Python and any other extension modules that you use with
that compiler because a different version of the C runtime likbrary is
used. The Python executable that comes from PythonLabs and the
wxPython extensions that I distribute are built with MSVC 6 with all
the Service Packs applied.</p>
<p>If you want to build a debugable version of wxWindows and wxPython you
will need to have also built a debug version of Python and any other
extension modules you need to use. You can tell if you have them
already if there is a _d in the file names, for example python_d.exe
or python23_d.dll. If you don't need to trace through the C/C++ parts
of the code with the debugger then building the normal (or hybrid)
version is fine, and you can use the regular python executables with
it.</p>
<p>Just like the unix versions I also use some scripts to help me build
wxWindows, but I use some non-standard stuff to do it. So if you want
to use them too you'll need to get a copy or 4DOS or 4NT from
<a class="reference" href="http://www.jpsoft.com/">http://www.jpsoft.com/</a> and also a copy of unix-like cat and sed
programs. You can also do by hand what my scripts are doing, but
there are a lof steps involved and I won't be going into details
here. There is a copy of my build scripts in wxWindowswxPythondistribmsw</p>
<ol class="arabic">
<li><p class="first">Set an environment variable to the root of the wxWindows source
tree:</p>
<pre class="literal-block">
set WXWIN=e:\projects\wxWindows
</pre>
</li>
<li><p class="first">Copy setup0.h to setup.h</p>
<blockquote>
<p>cd %WXWIN%includewxmsw
copy setup0.h setup.h</p>
</blockquote>
</li>
<li><p class="first">Edit %WXWIN%includewxmswsetup.h and change a few settings.
Some of them are changed by my build scripts depending on the type
of build (debug/hybrid, unicode/ansi). I change a few of the other
defaults to have these values:</p>
<pre class="literal-block">
wxDIALOG_UNIT_COMPATIBILITY 0
wxUSE_DEBUG_CONTEXT 1
wxUSE_MEMORY_TRACING 1
wxUSE_DIALUP_MANAGER 0
wxUSE_GLCANVAS 1
wxUSE_POSTSCRIPT 1
wxUSE_AFM_FOR_POSTSCRIPT 0
</pre>
</li>
<li><p class="first">Make a %WXWIN%BIN directory and add it to the PATH. My build
scripts will copy the wxWindows DLLs there.</p>
</li>
<li><p class="first">Change to the %WXWIN%buildmsw directory and copy my build scripts
there.</p>
</li>
<li><p class="first">Use the .make.btm command to build wxWindows. It needs one
command-line parameter which controls what kind of build(s) to do.
Use one of the following:</p>
<pre class="literal-block">
debug Build debug version
hybrid Build hybrid version
both Both debug and hybrid
debug-uni Build a debug unicode library
hybrid-uni Hybrid unicode (see the pattern yet? ;-)
both-uni and finally both unicode libraries
</pre>
<p>For example:</p>
<pre class="literal-block">
.make hybrid
You can also pass additional command line parameters as needed and
they will all be passed on to the nmake commands, for example to
clean up the build::
.make hybrid clean
</pre>
</li>
<li><p class="first">When that is done it will have built the main wxWindows DLLs and
also some of the contribs DLLs. There should be a ton of DLLs in
%WXDIR%bin and lots of lib files and other stuff in
%WXDIR%libvc_dll.</p>
</li>
<li><p class="first">Building wxPython on Windows is very similar to doing it for the
unix systems. We're not going to install the development version
of wxPython with these commands, so it won't impact your already
installed version of the latest release. You'll be able to test
with this version when you want to, and use the installed release
version the rest of the time. If you ever do want to install the
development verison please refer to INSTALL.txt.</p>
<p>Change to the wxWindowswxPython dir and run the this command,
makeing sure that you use the version of python that you want to
build for (if you have more than one on your system):</p>
<pre class="literal-block">
cd %WXWIN%\wxPython
python setup.py build_ext --inplace
</pre>
<p>If you are wanting to have the source files regenerated with swig,
then you need to turn on the USE_SWIG flag and optionally tell it
where to find the new swig executable, so add these flags:</p>
<pre class="literal-block">
USE_SWIG=1 SWIG=e:\projects\SWIG-cvs\swig.exe
</pre>
<p>If you built a Unicode version of wxWindows and want to also build
the Unicode version of wxPython then add this flag:</p>
<pre class="literal-block">
UNICODE=1
</pre>
<p>If you have a debug version of Python and wxWindows and want to
build a debug version of wxPython too, add the --debug flag to the
command line. You should then end up with a set of <tt class="literal"><span class="pre">*_d.pyd</span></tt>
files in the wx package and you'll have to run <tt class="literal"><span class="pre">python_d.exe</span></tt> to
use them. The debug and hybrid(release) versions can coexist.</p>
<p>When the setup.py command is done you should have fully populated
wxPython and wx packages locally in wxWindows/wxPython/wxPython and
wxWindows/wxPython/wx, with all the extension modules (<tt class="literal"><span class="pre">*.pyd</span></tt>
files) located in the wx package.</p>
</li>
<li><p class="first">To run code with the development verison of wxPython, just set the
PYTHONPATH to the wxPython dir in the CVS tree. For example:</p>
<pre class="literal-block">
set PYTHONPATH=e:\projects\wxWindows\wxPython
cd e:\projects\wxWindows\wxPython
python demo.py
</pre>
</li>
</ol>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -18,7 +18,7 @@ separate installation of wxPython and you can switch back and forth
between this and the release version that you may already have
installed.
If you want to make changes to any of the *.i files, (SWIG interface
If you want to make changes to any of the ``*.i`` files, (SWIG interface
definition files,) or to regenerate the extension sources or renamer
modules, then you will need an up to date version of SWIG. Either get
and build the current CVS version, or version 1.3.20, and then apply
@@ -92,7 +92,7 @@ place, then do the same for wxPython.
command but there are other libraries besides the main wxWindows
libs that also need to be built so again I make a script to do it
all for me so I don't forget anything. This time it is called
".make" (I use the leading ". so when I do "rm -r *" in my build
".make" (I use the leading ". so when I do ``rm -r *`` in my build
dir I don't lose my scripts too.) This is what it looks like::
make $* \
@@ -162,7 +162,7 @@ place, then do the same for wxPython.
When the setup.py command is done you should have fully populated
wxPython and wx packages locally in wxWindows/wxPython/wxPython and
.../wx, with all the extension modules (*.so files) located in the
.../wx, with all the extension modules (``*.so`` files) located in the
wx package.
@@ -317,14 +317,14 @@ here. There is a copy of my build scripts in wxWindows\wxPython\distrib\msw
If you have a debug version of Python and wxWindows and want to
build a debug version of wxPython too, add the --debug flag to the
command line. You should then end up with a set of *_d.pyd files
in the wx package and you'll have to run python_d.exe to use them.
The debug and hybrid(release) versions can coexist.
command line. You should then end up with a set of ``*_d.pyd``
files in the wx package and you'll have to run ``python_d.exe`` to
use them. The debug and hybrid(release) versions can coexist.
When the setup.py command is done you should have fully populated
wxPython and wx packages locally in wxWindows/wxPython/wxPython and
wxWindows/wxPython/wx, with all the extension modules (*.pyd files)
located in the wx package.
wxWindows/wxPython/wx, with all the extension modules (``*.pyd``
files) located in the wx package.
9. To run code with the development verison of wxPython, just set the

1207
wxPython/docs/CHANGES.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,5 @@
CHANGES.txt for wxPython
----------------------------------------------------------------------
=====================================================================
2.5.1.x
-------
@@ -31,7 +30,7 @@ happen when there are nested attempts to aquire the GIL.
The RPMs will now install menu items on Mandrake in
Applications/Development/Tools for PyCrust, XRCed, etc. They are also
installing icons and *.desktop items in the generic KDE and GNOME
installing icons and ``*.desktop`` items in the generic KDE and GNOME
locations, but I don't know yet if they are resulting in menu items on
non-Mandrake systems. (It didn't automatically do it on my RH-9 build
box but I didn't chase it very far...) If you have ideas for how to
@@ -80,7 +79,7 @@ Added wxScrolledPanel from Will Sadkin
Added SetShape method to top level windows (e.g. wxFrame.)
Changed wxSWIG to not generate Python code using apply, (since it will
be deprecated in the future) wxSWIG will use spam(*args, **kw) syntax
be deprecated in the future) wxSWIG will use ``spam(*args, **kw)`` syntax
instead. Also changed the generated __repr__ methods to be a bit more
informative.
@@ -90,7 +89,7 @@ and wxWindows match.
Added the new wx "renamer" package that will dynamically import from
the wxPython package and rename wxFooBar --> FooBar. That means that
people can do imports without "import *" and can use names like
people can do imports without ``"import *"`` and can use names like
wx.Frame instead of wx.wxFrame. This is phase 1 of a full transition
to the new namespace.
@@ -147,6 +146,7 @@ Added wxCursorFromBits.
2.4.0.7
-------
Gave up on generating a warning upon the use of the old true/false or
TRUE/FALSE values.
@@ -174,7 +174,8 @@ details.
2.4.0.6 (a.k.a. the I'm so stupid release)
-------
------------------------------------------
The new deprecation class for the old true/false symbols can now be
returned from OnInit. And I promise to be sure I am testing what I
think I am testing in the future...
@@ -182,7 +183,8 @@ think I am testing in the future...
2.4.0.5 (a.k.a. the blame it on Kevin release)
-------
----------------------------------------------
A few little but annoying bug fixes.
Updated pycolourchooser.
@@ -767,8 +769,7 @@ Added wxGetClientDisplayRect which on wxMSW returns a wxRect
representing the area on screen not occupied by the taskbar and such.
On other platforms it is equivallent to wxGetDisplaySize.
***---***---***---***---***---***---***---***---***---***---***---
OOR:
Implemented the first phase of OOR (Original Object Return). See
the text in the demo for more details of what this means, but in a
nutshell methods such as wxWindow.GetParent or FindWindowById will
@@ -789,7 +790,7 @@ On other platforms it is equivallent to wxGetDisplaySize.
stomped on during my testing. So please be sure to test everything
thoroughly when you install this version and be sure to report any
object-type related oddities to me.
***---***---***---***---***---***---***---***---***---***---***---
There is now a wxObject class that most other classes derive from like
in C++, but the methods provided don't really match but are wxPython
@@ -1124,7 +1125,7 @@ Removed all non wx stuff from the glcanvas module since DA's PyOpenGL
is better and compatible with the wxGLCanvas. You can get it at
http://starship.python.net:9673/crew/da/Code/PyOpenGL.
Added some missing EVT_ functions.
Added some missing EVT functions.
Added Dirk Holtwic's editor classes to the wxPython.lib.editor
package.
@@ -1554,8 +1555,8 @@ compatibility with the current wxWindows.
What's new in 0.5.0
-------------------
Changed the import semantics from "from wxPython import *" to "from
wxPython.wx import *" This is for people who are worried about
Changed the import semantics from ``"from wxPython import *"`` to
``"from wxPython.wx import *"`` This is for people who are worried about
namespace pollution, they can use "from wxPython import wx" and then
prefix all the wxPython identifiers with "wx."
@@ -1604,4 +1605,5 @@ version segfault shortly after starting up.
3. Varioius bug fixes, enhancements, etc.
----------------------------------------------------------------------

142
wxPython/docs/INSTALL.html Normal file
View File

@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>Installing wxPython 2.5 from Source</title>
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="installing-wxpython-2-5-from-source">
<h1 class="title">Installing wxPython 2.5 from Source</h1>
<p>This document will describe the few differences and additions to the
content in BUILD.txt for installing wxPython built from source.
Please follow the intstructions both in this file and in BUILD.txt to
perform this task. Where there is overlap the items described here
will take precedence.</p>
<div class="section" id="installing-on-unix-like-systems-not-os-x">
<h1><a name="installing-on-unix-like-systems-not-os-x">Installing on Unix-like Systems (not OS X)</a></h1>
<ol class="arabic">
<li><p class="first">When building wxWindows you need to decide if you want it to be a
private copy only accessed by wxPython, or if you would like it to
be installed in a stanard location such as /usr. Or perhaps you
already have a version of wxWindows installed on your system (such
as from an RPM) and you want wxPython to use that version too. If
so then you'll want to ensure that the flags and options used to
build the installed version are compatible with wxPython.</p>
</li>
<li><p class="first">If you do decide to build and install your own wxWindows then there
are a few tweaks to the configure flags described in BUILD.txt that
you will probably want to make. Instead of --enable-debug use
this configure flag:</p>
<pre class="literal-block">
--enable-optimize \
</pre>
<p>Normally I also use the following flag in order to have wxWindows
runtime assertions turned into Python exceptions where possible.
It does add extra code to the build but probably not enough to
worry about it. However if you want to get as lean a build as
possible you can leave it out, but if your code does something bad
then instead of exceptions you'll likely get a crash.</p>
<blockquote>
<p>--enable-debug_flag </p>
</blockquote>
<p>If you are building a private copy of wxWindows (IOW, not installed
in a standard library location) then it can be kind of a hassle to
always have to set the LD_LIBRARY_PATH variable so wxPython can
find the wxWindows shared libraries. You can hard code the library
path into the binaries by using the rpath option when configuring
wxWindows. For example:</p>
<pre class="literal-block">
--enable-rpath=/opt/wx/2.5/lib \
</pre>
<p>SOLARIS NOTE: The --enable-rpath option may cause problems when
using wxGTK on Solaris when compiling wxPython as described below.
The woraround is to not use --enable-rpath flag for configure, but
in that case all wxPython applications <em>must</em> have the
LD_LIBRARY_PATH set to include $WXPREF/lib, or you can use the
'crle' program to modify the runtime linking environment. If this
is the only installation of wxGTK on the system then you can use a
system library path for prefix and not have to worry about it at
all.</p>
</li>
<li><p class="first">Build and install wxGTK as described in BUILD.txt.</p>
</li>
<li><p class="first">In addition to building wxPython as described in BUILD.txt, you can
install it to Python's site-packages dir, as well as some scripts
into the same bin dir used by Python by using this command:</p>
<pre class="literal-block">
python2.3 setup.py install
</pre>
<p>If you would like to install to some place besides the prefix where
Python is installed, (such as to your home directory) then you can
add &quot;--root=&lt;path&gt;&quot; after the &quot;install&quot; command. This will use
&lt;path&gt; as the prefix and will install scripts to a bin subdir and
the wxPython packages to a lib subdir. To use wxPython like this
you'll need to ensure that the directory containing wxPython is
contained in the PYTHONPATH environment variable.</p>
</li>
</ol>
</div>
<div class="section" id="installing-on-os-x">
<h1><a name="installing-on-os-x">Installing on OS X</a></h1>
<p>Installing wxPython on OS X is nearly the same as the Unix
instructions above, except for a few small, but important details:</p>
<ol class="arabic simple">
<li>The --enable-rpath configure option is not needed since the path to
the wxWindows dylibs will automatically be encoded into the
extension modules when they are built. If you end up moving the
wxWindows dynlibs to some other location (such as inside the .app
bundle of your applicaiton for distribution to other users,) then
you will need to set DYLD_LIBRARY_PATH to this location so the
dylibs can be found at runtime.</li>
<li>Depending on the version of OS X Python may be installed in
different locations. On 10.2 (Jaguar) you need to download and
install MacPython-OSX-2.3 from <a class="reference" href="http://www.python.org/">http://www.python.org/</a> and the
Python Framework will then be installed in /Library/Frameworks. On
10.3 (Panther) Apple supplies the Python Framework as part of the
OS install, but it will be located in /System/Library/Frameworks
instead. However, on Panther the site-pacakges dir is sym-linked
to /Library/Python/2.3 so the wxPython pacakges will end up there,
although they will still be visible from site-packages. If you are
building distributions of wxPython to be installed on other
machines be careful to install to /Library/Python/2.3. To
complicate things further, the Jaguar version, or a custom build
you do yourself will end up in /Library/Frameworks even on
Panther...</li>
<li>You need to use pythonw at the command line or PythonLauncher app
to run wxPython apps, otherwise the app will not be able to fully
use the GUI display.</li>
</ol>
</div>
<div class="section" id="installing-on-windows">
<h1><a name="installing-on-windows">Installing on Windows</a></h1>
<ol class="arabic">
<li><p class="first">Build wxWindows and wxPython as described in BUILD.txt. If you
would rather have a version without the code that turns runtime
assertions into Python exceptions, then use &quot;release&quot; instead of
&quot;hybrid&quot; when building wxWindows and add &quot;FINAL=1&quot; to the setup.py
command line.</p>
</li>
<li><p class="first">Install wxPython like this:</p>
<pre class="literal-block">
python setup.py install
</pre>
</li>
<li><p class="first">Copy the wxWindows DLLs to the wx package directory so they can be
found at runtime by the extension modules without requiring that
they be installed on the PATH:</p>
<pre class="literal-block">
copy %WXWIN%\BIN\wx*h_*.dll c:\Python23\Lib\site-pacakges\wx
</pre>
</li>
</ol>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -100,10 +100,29 @@ def Bind(self, event, handler, source=None, id=wxID_ANY, id2=wxID_ANY):
<pre class="literal-block">
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_BUTTON, self.OnButtonClick, theButton)
self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
</pre>
<p>The wx.Menu methods that add items to a wx.Menu have been modified
such that they return a reference to the wx.MenuItem that was created.
Additionally menu items and toolbar items have been modified to
automatically generate a new ID if -1 is given, similar to using -1
with window classess. This means that you can create menu or toolbar
items and event bindings without having to predefine a unique menu ID,
although you still can use IDs just like before if you want. For
example, these are all equivallent other than ID values:</p>
<pre class="literal-block">
1.
item = menu.Append(-1, &quot;E&amp;xit&quot;, &quot;Terminate the App&quot;)
self.Bind(wx.EVT_MENU, self.OnExit, item)
2.
item = menu.Append(wx.ID_EXIT, &quot;E&amp;xit&quot;, &quot;Terminate the App&quot;)
self.Bind(wx.EVT_MENU, self.OnExit, item)
3.
menu.Append(wx.ID_EXIT, &quot;E&amp;xit&quot;, &quot;Terminate the App&quot;)
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
</pre>
<p>I hope to be able to remove the need for using IDs even for menu
events too...</p>
<p>If you create your own custom event types and EVT_* functions, and you
want to be able to use them with the Bind method above then you should
change your EVT_* to be an instance of wxPyEventBinder instead of a
@@ -329,10 +348,9 @@ class MyDialog(wx.Dialog):
</div>
<div class="section" id="sizers">
<h1><a name="sizers">Sizers</a></h1>
<p>The hack allowing the old &quot;option&quot; keyword parameter has been
removed. If you use keyworkd args with wxSizer Add, Insert, or
Prepend then you will need to use the &quot;proportion&quot; name instead of
&quot;option&quot;.</p>
<p>The hack allowing the old &quot;option&quot; keyword parameter has been removed.
If you use keyworkd args with wxSizer Add, Insert, or Prepend methods
then you will need to use the &quot;proportion&quot; name instead of &quot;option&quot;.</p>
<p>When adding a spacer to a sizer you now need to use a wxSize or a
2-integer sequence instead of separate width and height parameters.</p>
<p>The wxGridBagSizer class (very similar to the RowColSizer in the
@@ -348,12 +366,11 @@ wrappers will figure out what to do.</p>
into a single extension module, the &quot;core&quot; module is now just a few
extensions that are linked independently, and then merged together
later into the main namespace via Python code.</p>
<p>Because of the above, the &quot;internal&quot; module names have changed, but
you shouldn't have been using them anyway so it shouldn't bother
you. ;-)</p>
<p>The wxPython.help module no longer exists and the classes therein are
now part of the core module imported with wxPython.wx or the wx
package.</p>
<p>Because of the above and also because of the way the new SWIG works,
the &quot;internal&quot; module names have changed, but you shouldn't have been
using them anyway so it shouldn't bother you. ;-)</p>
<p>The help module no longer exists and the classes therein are now part
of the core module imported with wxPython.wx or the wx package.</p>
<p>wxPyDefaultPosition and wxPyDefaultSize are gone. Use the
wxDefaultPosition and wxDefaultSize objects instead.</p>
<p>Similarly, the wxSystemSettings backwards compatibiility aliases for
@@ -368,13 +385,15 @@ refreshed.</p>
<p>wxPyTypeCast has been removed. Since we've had the OOR (Original
Object Return) for a couple years now there should be no need to use
wxPyTypeCast at all.</p>
<p>If you use the old wxPython package and wxPython.wx namespace then
there are compatibility aliases for much of the above items.</p>
<p>The wxWave class has been renamed to wxSound, and now has a slightly
different API.</p>
</div>
</div>
<hr class="footer" />
<div class="footer">
<a class="reference" href="MigrationGuide.txt">View document source</a>.
Generated on: 2004-01-13 20:47 UTC.
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

702
wxPython/docs/PyManual.html Normal file
View File

@@ -0,0 +1,702 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>The Py Manual</title>
<meta name="author" content="Patrick K. O'Brien" />
<meta name="organization" content="Orbtech" />
<meta name="date" content="2003-07-02" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="the-py-manual">
<h1 class="title">The Py Manual</h1>
<h2 class="subtitle" id="py-served-fresh-daily">Py - Served Fresh Daily</h2>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Patrick K. O'Brien</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
<tr><th class="docinfo-name">Organization:</th>
<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-07-02</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>1.2</td></tr>
</tbody>
</table>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#introduction" id="id3" name="id3">Introduction</a></li>
<li><a class="reference" href="#developer-reference" id="id4" name="id4">Developer Reference</a></li>
<li><a class="reference" href="#what-is-py" id="id5" name="id5">What is Py?</a></li>
<li><a class="reference" href="#pycrust-is-dead-long-live-py" id="id6" name="id6">PyCrust is dead! Long live Py!</a></li>
<li><a class="reference" href="#py-standalone-programs" id="id7" name="id7">Py standalone programs</a></li>
<li><a class="reference" href="#pyalacarte" id="id8" name="id8">PyAlaCarte</a></li>
<li><a class="reference" href="#pyalamode" id="id9" name="id9">PyAlaMode</a></li>
<li><a class="reference" href="#pycrust" id="id10" name="id10">PyCrust</a></li>
<li><a class="reference" href="#pyfilling" id="id11" name="id11">PyFilling</a></li>
<li><a class="reference" href="#pyshell" id="id12" name="id12">PyShell</a></li>
<li><a class="reference" href="#pywrap" id="id13" name="id13">PyWrap</a></li>
<li><a class="reference" href="#py-modules" id="id14" name="id14">Py modules</a></li>
<li><a class="reference" href="#decorator-classes" id="id15" name="id15">Decorator classes</a></li>
<li><a class="reference" href="#projects-using-py" id="id16" name="id16">Projects using Py</a></li>
<li><a class="reference" href="#history-of-changes" id="id17" name="id17">History of changes</a><ul>
<li><a class="reference" href="#to-2004" id="id18" name="id18">0.9.4 (1/25/2004 to //2004)</a></li>
<li><a class="reference" href="#to-1-24-2004" id="id19" name="id19">0.9.3 (9/25/2003 to 1/24/2004)</a></li>
<li><a class="reference" href="#to-9-25-2003" id="id20" name="id20">0.9.2 (5/3/2003 to 9/25/2003)</a></li>
<li><a class="reference" href="#to-5-2-2003" id="id21" name="id21">0.9.1 (3/21/2003 to 5/2/2003)</a></li>
<li><a class="reference" href="#to-3-20-2003" id="id22" name="id22">0.9 (2/27/2003 to 3/20/2003)</a></li>
<li><a class="reference" href="#to-2-26-2003" id="id23" name="id23">0.8.2 (1/5/2003 to 2/26/2003)</a></li>
<li><a class="reference" href="#to-12-25-2002" id="id24" name="id24">0.8.1 (12/20/2002 to 12/25/2002)</a></li>
<li><a class="reference" href="#to-12-16-2002" id="id25" name="id25">0.8 (10/29/2002 to 12/16/2002)</a></li>
<li><a class="reference" href="#to-8-27-2002" id="id26" name="id26">0.7.2 (2/22/2002 to 8/27/2002)</a></li>
<li><a class="reference" href="#to-2-21-2002" id="id27" name="id27">0.7.1 (12/12/2001 to 2/21/2002)</a></li>
<li><a class="reference" href="#to-12-11-2001" id="id28" name="id28">0.7 (10/15/2001 to 12/11/2001)</a></li>
<li><a class="reference" href="#to-10-12-2001" id="id29" name="id29">0.6.1 (9/19/2001 to 10/12/2001)</a></li>
<li><a class="reference" href="#to-9-12-2001" id="id30" name="id30">0.6 (8/21/2001 to 9/12/2001)</a></li>
<li><a class="reference" href="#to-8-20-2001" id="id31" name="id31">0.5.4 (8/17/2001 to 8/20/2001)</a></li>
<li><a class="reference" href="#id1" id="id32" name="id32">0.5.3 (8/16/2001)</a></li>
<li><a class="reference" href="#to-8-15-2001" id="id33" name="id33">0.5.2 (8/14/2001 to 8/15/2001)</a></li>
<li><a class="reference" href="#to-8-14-2001" id="id34" name="id34">0.5.1 (8/10/2001 to 8/14/2001)</a></li>
<li><a class="reference" href="#id2" id="id35" name="id35">0.5 (8/8/2001)</a></li>
<li><a class="reference" href="#to-8-7-2001" id="id36" name="id36">0.4 (8/4/2001 to 8/7/2001)</a></li>
<li><a class="reference" href="#to-8-3-2001" id="id37" name="id37">0.3 (8/2/2001 to 8/3/2001)</a></li>
<li><a class="reference" href="#to-8-2-2001" id="id38" name="id38">0.2 (7/30/2001 to 8/2/2001)</a></li>
<li><a class="reference" href="#to-7-19-2001" id="id39" name="id39">0.1 (7/1/2001 to 7/19/2001)</a></li>
<li><a class="reference" href="#in-the-beginning-there-was-pie-7-1-2001" id="id40" name="id40">In the beginning, there was pie... (7/1/2001)</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id3" name="introduction">Introduction</a></h1>
<p>This document will show you how to use the Py programs and the Py
library of Python source code modules. Py is the new name for the
project that began as PyCrust. Py is officially part of <a class="reference" href="http://www.wxpython.org/">wxPython</a>,
and includes PyCrust, so PyCrust is no longer distributed separately.</p>
</div>
<div class="section" id="developer-reference">
<h1><a class="toc-backref" href="#id4" name="developer-reference">Developer Reference</a></h1>
<p>Source code documentation for developers is available at:</p>
<p><a class="reference" href="http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html">http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html</a></p>
</div>
<div class="section" id="what-is-py">
<h1><a class="toc-backref" href="#id5" name="what-is-py">What is Py?</a></h1>
<p>Besides being <a class="reference" href="http://www.wikipedia.org/wiki/Pie">a delicious dessert</a>, Py is the name for a collection
of whimsically-named Python programs and modules that began as the
PyCrust project. So Py is really several things: a set of standalone
programs, including the original PyCrust program, a library of Python
source code modules that can be used in your own programs, a set of
decorator classes that enhance the wxPython class library, and as many
examples of bad &quot;pie&quot; puns as I can come up with. (If you're going to
do something, you might as well do it all the way, right?) Py uses
Python and wxPython, so it works equally well on Windows, Linux and
Mac OS X.</p>
</div>
<div class="section" id="pycrust-is-dead-long-live-py">
<h1><a class="toc-backref" href="#id6" name="pycrust-is-dead-long-live-py">PyCrust is dead! Long live Py!</a></h1>
<p>This project began with a program I created called PyCrust - an
interactive, graphical Python shell, developed using the wxPython GUI
toolkit. For about two years, PyCrust was hosted on <a class="reference" href="http://www.sf.net/projects/pycrust/">SourceForge</a>.
Shortly after I created PyCrust, the wxPython folks started including
it in their distribution. As the PyCrust project grew, it reached a
point where I thought the original PyCrust name was too confining. I
was using the PyCrust code base to develop programs that weren't just
Python shells any more.</p>
<p>Around that same time, the wxPython folks asked me if I'd be willing
to move all my wxPython-related projects into the <a class="reference" href="http://cvs.wxwindows.org">wxPython CVS
repository</a>, and become part of the <a class="reference" href="http://www.wxpython.org/">wxPython</a>/<a class="reference" href="http://www.wxwindows.org/">wxWindows</a> developer team.
I decided the time was right to restructure the PyCrust project.
During the move, the PyCrust package was renamed to &quot;py&quot; (lowercase
&quot;p&quot;) and the collection of programs and modules as a whole became
known as &quot;Py&quot; (with a capital &quot;P&quot;).</p>
<p>The original goal of PyCrust was to be the best interactive, graphical
Python shell (of course, I claimed it was the &quot;flakiest&quot; Python
shell). And that was all I wanted it to be. But little by little I
found myself developing a wider variety of tools for wxPython
applications. Eventually I'll create a debugger (PySlice, perhaps)
and whatever else is needed to one day become a complete wxPython
application development environment (PyFactory?). In the mean time,
PyCrust is still the flakiest Python shell, and the other Py programs
are equally tasty.</p>
<p>At this point, Py has standalone programs that include Python code
editors (PyAlaCarte and PyAlaMode), interactive Python shells (PyCrust
and PyShell), and a runtime wrapper (PyWrap). The runtime wrapper
utility provides you with runtime introspection capabilities for your
wxPython programs without having to include PyCrust or PyShell in your
program, and without having to alter one line of your source code.</p>
<p>Py also contains a collection of modules that you can use in your own
wxPython applications to provide similar services, either for your own
use during development, or as an interface for users of your programs.
These modules are the same ones used by all the Py programs. In
addition, Py contains a set of decorator classes that enhance the
wxPython class library, by dynamically attaching docstrings and call
signatures at runtime.</p>
</div>
<div class="section" id="py-standalone-programs">
<h1><a class="toc-backref" href="#id7" name="py-standalone-programs">Py standalone programs</a></h1>
<p>These are the standalone applications in the Py collection:</p>
<ul class="simple">
<li>PyAlaCarte</li>
<li>PyAlaMode</li>
<li>PyCrust</li>
<li>PyFilling</li>
<li>PyShell</li>
<li>PyWrap</li>
</ul>
</div>
<div class="section" id="pyalacarte">
<h1><a class="toc-backref" href="#id8" name="pyalacarte">PyAlaCarte</a></h1>
<p>PyAlaCarte is a Python source code editor. It is designed to have a
simple, single-file interface. As a standalone application, it is
good for simple, short editing tasks. But it is really meant to be
more of an example of how to embed the Py editor into a wxPython
application.</p>
</div>
<div class="section" id="pyalamode">
<h1><a class="toc-backref" href="#id9" name="pyalamode">PyAlaMode</a></h1>
<p>PyAlaMode is a Python source code editor.</p>
</div>
<div class="section" id="pycrust">
<h1><a class="toc-backref" href="#id10" name="pycrust">PyCrust</a></h1>
<p>PyCrust is an interactive, Python shell. But it's more than just a
shell. It includes a tabbed notebook containing a namespace tree
(PyFilling), and several other things.</p>
</div>
<div class="section" id="pyfilling">
<h1><a class="toc-backref" href="#id11" name="pyfilling">PyFilling</a></h1>
<p>PyFilling is a namespace viewer. It isn't really useful as a
standalone program, but it does illustrate how to make use of the
underlying <tt class="literal"><span class="pre">filling</span></tt> module.</p>
</div>
<div class="section" id="pyshell">
<h1><a class="toc-backref" href="#id12" name="pyshell">PyShell</a></h1>
<p>PyShell is an interactive, Python shell. It shares the same base code
as PyCrust, but doesn't have any of the extra features that appear in
the PyCrust notebook interface.</p>
<div class="figure">
<p><img alt="/screenshots/PyShell.png" src="/screenshots/PyShell.png" /></p>
<p class="caption">PyShell running on Mandrake Linux 9.1.</p>
</div>
</div>
<div class="section" id="pywrap">
<h1><a class="toc-backref" href="#id13" name="pywrap">PyWrap</a></h1>
<p>PyWrap is a runtime utility that lets you run an existing wxPython
program with a PyCrust frame at the same time. Inside the PyCrust
shell namespace, the local variable <tt class="literal"><span class="pre">app</span></tt> is assigned to your
application instance. In this way you can introspect your entire
application within the PyCrust shell, as well as the PyFilling
namespace viewer. And through the use of the Py decorator classes,
PyCrust can display wxPython function and method signatures as well as
docstrings for the entire wxPython library.</p>
</div>
<div class="section" id="py-modules">
<h1><a class="toc-backref" href="#id14" name="py-modules">Py modules</a></h1>
<p>Py was designed to be modular. That means graphical code is kept
separate from non-graphical code, and many of the Py modules can be
used by other programs. Likewise, other programs can supply some of
the modules needed by Py. For example, you could supply a customized
interpreter module and plug it in to the PyCrust standalone
application. As long as it supports the minimum functionality
required, PyCrust will work just as well with your interpreter as with
its default interpreter.</p>
</div>
<div class="section" id="decorator-classes">
<h1><a class="toc-backref" href="#id15" name="decorator-classes">Decorator classes</a></h1>
<p>Py contains a set of decorator classes that enhance the wxPython class
library, by dynamically attaching docstrings and call signatures at
runtime.</p>
</div>
<div class="section" id="projects-using-py">
<h1><a class="toc-backref" href="#id16" name="projects-using-py">Projects using Py</a></h1>
<ul class="simple">
<li><a class="reference" href="http://conflictsolver.sourceforge.net/">Conflict Solver</a></li>
<li><a class="reference" href="http://www.gnumed.org/">Gnumed</a></li>
<li>PyGist</li>
<li><a class="reference" href="http://www.pythoncard.org/">PythonCard</a></li>
<li><a class="reference" href="http://rpy.sourceforge.net/">RPy</a></li>
<li><a class="reference" href="http://www.scipy.org/">SciPy</a></li>
<li><a class="reference" href="http://www.sim42.org/">Sim42</a></li>
<li><a class="reference" href="http://linus.yorktown.arlington.k12.va.us/CS/APCSC/student_sites/David_Mayo/wxGasp">wxGasp</a></li>
</ul>
</div>
<div class="section" id="history-of-changes">
<h1><a class="toc-backref" href="#id17" name="history-of-changes">History of changes</a></h1>
<p>This section lists all the changes that have been made to the Py
programs and modules, since the beginning.</p>
<div class="section" id="to-2004">
<h2><a class="toc-backref" href="#id18" name="to-2004">0.9.4 (1/25/2004 to //2004)</a></h2>
<p>Removed wxd decorators in favor of new SWIG-generated docstrings.</p>
<p>Removed docs tabs from crust interface:
* wxPython Docs
* wxSTC Docs</p>
</div>
<div class="section" id="to-1-24-2004">
<h2><a class="toc-backref" href="#id19" name="to-1-24-2004">0.9.3 (9/25/2003 to 1/24/2004)</a></h2>
<p>Fun and games with dynamic renaming. Details of any other changes
were lost in the confusion. I'll try to do better in the future.</p>
</div>
<div class="section" id="to-9-25-2003">
<h2><a class="toc-backref" href="#id20" name="to-9-25-2003">0.9.2 (5/3/2003 to 9/25/2003)</a></h2>
<p>Changed to the new prefix-less &quot;wx&quot; package:</p>
<pre class="literal-block">
import wx
</pre>
<p>instead of:</p>
<pre class="literal-block">
from wxPython import wx
</pre>
<p>Fixed typo in <tt class="literal"><span class="pre">PyWrap.py</span></tt>:</p>
<pre class="literal-block">
if __name__ == '__main__':
main(sys.argv)
</pre>
<p>should have been:</p>
<pre class="literal-block">
if __name__ == '__main__':
main()
</pre>
<p>Added pretty-print Display tab to Crust, based on suggestion from
Jason Whitlark.</p>
<p>Improved <tt class="literal"><span class="pre">Can*</span></tt> checks in <tt class="literal"><span class="pre">EditWindow</span></tt>, since STC is too lenient,
particularly when it is set to read-only but returns True for
CanPaste() (seems like an STC bug to me):</p>
<pre class="literal-block">
def CanCopy(self):
&quot;&quot;&quot;Return True if text is selected and can be copied.&quot;&quot;&quot;
return self.GetSelectionStart() != self.GetSelectionEnd()
def CanCut(self):
&quot;&quot;&quot;Return True if text is selected and can be cut.&quot;&quot;&quot;
return self.CanCopy() and self.CanEdit()
def CanEdit(self):
&quot;&quot;&quot;Return True if editing should succeed.&quot;&quot;&quot;
return not self.GetReadOnly()
def CanPaste(self):
&quot;&quot;&quot;Return True if pasting should succeed.&quot;&quot;&quot;
return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
</pre>
</div>
<div class="section" id="to-5-2-2003">
<h2><a class="toc-backref" href="#id21" name="to-5-2-2003">0.9.1 (3/21/2003 to 5/2/2003)</a></h2>
<p>PyCrust is dead! Long live Py!</p>
<ul class="simple">
<li>Renamed <tt class="literal"><span class="pre">PyCrust</span></tt> package to <tt class="literal"><span class="pre">py</span></tt>.</li>
<li>Moved code to wxPython's CVS repository.</li>
</ul>
<p>Fixed bug in <tt class="literal"><span class="pre">introspect.py</span></tt> on introspecting objects occurring
immediately after a secondary prompt, like this:</p>
<pre class="literal-block">
&gt;&gt;&gt; l = [1, 2, 3]
&gt;&gt;&gt; for n in range(3):
... l. &lt;-- failed to popup autocomplete list
</pre>
<p>Added documentation files:</p>
<ul class="simple">
<li>PyManual.txt</li>
<li>wxPythonManual.txt</li>
<li>wxPythonPackage.txt</li>
<li>wxPythonExamples.txt</li>
</ul>
<p>Added PyAlaMode and PyAlaCarte code editors.</p>
<p>Major refactoring to support <tt class="literal"><span class="pre">editor</span></tt> and <tt class="literal"><span class="pre">shell</span></tt> from the same
base.</p>
<p>Renamed program files:</p>
<ul class="simple">
<li><tt class="literal"><span class="pre">PyCrustApp.py</span></tt> to <tt class="literal"><span class="pre">PyCrust.py</span></tt></li>
<li><tt class="literal"><span class="pre">PyFillingApp.py</span></tt> to <tt class="literal"><span class="pre">PyFilling.py</span></tt></li>
<li><tt class="literal"><span class="pre">PyShellApp.py</span></tt> to <tt class="literal"><span class="pre">PyShell.py</span></tt></li>
<li><tt class="literal"><span class="pre">wrap.py</span></tt> to <tt class="literal"><span class="pre">PyWrap.py</span></tt></li>
</ul>
<p>Removed disabling of autocomplete for lists of 2000 items or more.
The current implementation of wxSTC can now handle lists this big.</p>
<p>Improved handling of <tt class="literal"><span class="pre">sys.path</span></tt> to mimic the standard Python shell.</p>
</div>
<div class="section" id="to-3-20-2003">
<h2><a class="toc-backref" href="#id22" name="to-3-20-2003">0.9 (2/27/2003 to 3/20/2003)</a></h2>
<p>Added fontIncrease, fontDecrease, fontDefault signals, receivers and
keybindings:</p>
<pre class="literal-block">
Ctrl+] Increase font size.
Ctrl+[ Decrease font size.
Ctrl+= Default font size.
</pre>
<p>Continued enhancement of the decorator capability to provide better
documentation and docstrings for wxPython classes and functions.</p>
<p>Introduced new tabbed interface:</p>
<ul class="simple">
<li>Namespace</li>
<li>Calltip</li>
<li>Session</li>
<li>Dispatcher</li>
<li>wxPython Docs</li>
<li>wxSTC Docs</li>
</ul>
<p><tt class="literal"><span class="pre">Filling.tree</span></tt> now expands tuples as well as lists. (It should have
done this all along, I just never noticed this omission before.)</p>
<p>Added this True/False test to all modules:</p>
<pre class="literal-block">
try:
True
except NameError:
True = 1==1
False = 1==0
</pre>
<p>Added <tt class="literal"><span class="pre">wxd</span></tt> directory with decoration classes.</p>
</div>
<div class="section" id="to-2-26-2003">
<h2><a class="toc-backref" href="#id23" name="to-2-26-2003">0.8.2 (1/5/2003 to 2/26/2003)</a></h2>
<p>Wrapped <tt class="literal"><span class="pre">sys.ps1</span></tt>, <tt class="literal"><span class="pre">sys.ps2</span></tt>, and <tt class="literal"><span class="pre">sys.ps3</span></tt> in <tt class="literal"><span class="pre">str()</span></tt>.
(Thanks, Kieran Holland.)</p>
<p>Fixed minor things found by PyChecker.</p>
<p>Changed locals to use <tt class="literal"><span class="pre">__main__.__dict__</span></tt> and added code to clean up
the namespace, making it as close to the regular Python environment as
possible. This solves the problem of pickling and unpickling
instances of classes defined in the shell.</p>
<p>Made <tt class="literal"><span class="pre">shell.PasteAndRun()</span></tt> a little more forgiving when it finds a
ps2 prompt line with no trailing space, such when you copy code from a
web page.</p>
<p>Improved autocomplete behavior by adding these to shell:</p>
<pre class="literal-block">
self.AutoCompSetAutoHide(False)
self.AutoCompStops(' .,;:([)]}\'&quot;\\&lt;&gt;%^&amp;+-=*/|`')
</pre>
<p>Added <tt class="literal"><span class="pre">decor</span></tt> directory, <tt class="literal"><span class="pre">decorator.py</span></tt>, <tt class="literal"><span class="pre">stcDecor.py</span></tt>, and
<tt class="literal"><span class="pre">stcConstants.py</span></tt>. These all serve the purpose of adding docstrings
to existing wxPython classes, in particular the <tt class="literal"><span class="pre">wxStyledTextCtrl</span></tt>.</p>
<p>Added <tt class="literal"><span class="pre">wrap.py</span></tt>, a command line utility for running a wxPython app
with additional runtime-tools loaded, such as PyCrust (the only tool
at this point).</p>
<p>Flushed the clipboard Cut/Copy operations so that selections will
exist in the clipboard even after PyCrust has been closed.</p>
<p>Improved the suppression of docstrings for simple data types appearing
in the namespace viewer.</p>
<p>Better handling of autocompletion with numeric types; no
autocompletion when typing a dot after an integer. If the
autocompletion is desired, type a space before the dot:</p>
<pre class="literal-block">
func = 3 .
</pre>
<p>More Filling!!! The namespace tree is now dynamically updated.</p>
</div>
<div class="section" id="to-12-25-2002">
<h2><a class="toc-backref" href="#id24" name="to-12-25-2002">0.8.1 (12/20/2002 to 12/25/2002)</a></h2>
<p>Improved keyboard handling with Autocomplete active. You can now use
Enter as well as Tab to select an item from the list.</p>
<p>Disabled autocomplete for lists of 2000 items or more. The current
implementation of wxSTC can't handle lists this big.</p>
<p>Changed <tt class="literal"><span class="pre">filling</span></tt> to always display docstrings for objects. This is
useful for objects whose docstrings have been decorated, rather than
coming directly from the source code. (Hmmm. Sounds like someone is
doing some decorating. I wonder where that would be helpful? &lt;wink&gt;)</p>
<p>Fixed handling of icon. Added <tt class="literal"><span class="pre">images.py</span></tt> file.</p>
</div>
<div class="section" id="to-12-16-2002">
<h2><a class="toc-backref" href="#id25" name="to-12-16-2002">0.8 (10/29/2002 to 12/16/2002)</a></h2>
<p>Added &quot;help&quot; to startup banner info.</p>
<p>Made all <tt class="literal"><span class="pre">wx</span></tt> and <tt class="literal"><span class="pre">stc</span></tt> imports explicit. No more <tt class="literal"><span class="pre">import</span> <span class="pre">*</span></tt>.</p>
<p>Replaced use of the <tt class="literal"><span class="pre">wx</span></tt> module's <tt class="literal"><span class="pre">true</span></tt> and <tt class="literal"><span class="pre">false</span></tt> with
Python's <tt class="literal"><span class="pre">True</span></tt> and <tt class="literal"><span class="pre">False</span></tt>.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getRoot()</span></tt> to use <tt class="literal"><span class="pre">tokenize</span></tt> module. This
does a slightly better job than the previous parsing routine and the
code is clearer.</p>
<p>Improved handling of whitespace and empty types during introspection.</p>
<p>Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)</p>
<p>Added shell.about() which works like this:</p>
<pre class="literal-block">
&gt;&gt;&gt; shell.about()
PyCrust Version: 0.8
Shell Revision: 1.80
Interpreter Revision: 1.15
Python Version: 2.2.2
wxPython Version: 2.3.3.1
Platform: linux2
</pre>
<p>Added copy plus and paste plus to shell menu.</p>
<p>Moved shell menu from <tt class="literal"><span class="pre">shell.py</span></tt> to <tt class="literal"><span class="pre">shellmenu.py</span></tt>.</p>
<p>Added <tt class="literal"><span class="pre">sys.stdin.readlines()</span></tt> support.</p>
<p>Added <tt class="literal"><span class="pre">time.sleep()</span></tt> in <tt class="literal"><span class="pre">readline()</span></tt> and <tt class="literal"><span class="pre">OnIdle()</span></tt> event
handler to free up the CPU.</p>
</div>
<div class="section" id="to-8-27-2002">
<h2><a class="toc-backref" href="#id26" name="to-8-27-2002">0.7.2 (2/22/2002 to 8/27/2002)</a></h2>
<p>Tweaked <tt class="literal"><span class="pre">getAttributeNames()</span></tt> to pick up a few more attributes:</p>
<pre class="literal-block">
'__bases__', '__class__', '__dict__', '__name__', 'func_closure',
'func_code', 'func_defaults', 'func_dict', 'func_doc',
'func_globals', 'func_name'
</pre>
<p>Added a tests directory and unit tests.</p>
<p>Improved support for empty types in the shell: <tt class="literal"><span class="pre">[]</span></tt>, <tt class="literal"><span class="pre">()</span></tt> and
<tt class="literal"><span class="pre">{}</span></tt> as far as when call tips and autocompletion are available.</p>
<p>Added support for the other triple string - <tt class="literal"><span class="pre">''''''</span></tt>.</p>
<p>Refactored <tt class="literal"><span class="pre">introspect.py</span></tt> to improve testability.</p>
<p>Improved call tips for unbound methods by leaving the &quot;self&quot;
parameter, since unbound methods require an instance be passed.</p>
<p>Fixed call tip bug where a tip was displayed when a &quot;(&quot; was typed
after an object that wasn't callable.</p>
<p>Fixed <tt class="literal"><span class="pre">getAllAttributeNames</span></tt> when <tt class="literal"><span class="pre">str(object)</span></tt> fails.</p>
<p>Added brace highlighting. (Thank you, Kevin Altis.)</p>
<p>Fixed problem displaying unicode objects in <tt class="literal"><span class="pre">PyFilling</span></tt>.</p>
<p>Changed how <tt class="literal"><span class="pre">filling.py</span></tt> checks for expandable objects. Lists are
now expandable objects.</p>
<p>Made the key handling more robust when there is an active text
selection that includes text prior to the last primary prompt. Thanks
to Raul Cota for pointing this out.</p>
<p>Fixed wxSTC problem with brace highlighting and non-us keyboards.
(Thank you for the patch, Jean-Michel Fauth.)</p>
<p>Added <tt class="literal"><span class="pre">busy</span> <span class="pre">=</span> <span class="pre">wxBusyCursor()</span></tt> to key points in <tt class="literal"><span class="pre">shell</span></tt> and
<tt class="literal"><span class="pre">filling</span></tt>.</p>
<p>Added <tt class="literal"><span class="pre">OnCloseWindow</span></tt> handler to <tt class="literal"><span class="pre">ShellFrame</span></tt> and <tt class="literal"><span class="pre">CrustFrame</span></tt>.</p>
<p>Default to <tt class="literal"><span class="pre">SetWrapMode(1)</span></tt> for shell and namespace viewer.</p>
<p>Added <tt class="literal"><span class="pre">shell.wrap()</span></tt> and <tt class="literal"><span class="pre">shell.zoom()</span></tt>.</p>
<p>Added autoCompleteKeys hooks for Raul Cota.</p>
<p>Cleaned up various little key handling bugs.</p>
<p>Changed input methods to get values from shell, rather than dialog
boxes. Renamed <tt class="literal"><span class="pre">readIn</span></tt> to <tt class="literal"><span class="pre">readline</span></tt> and <tt class="literal"><span class="pre">readRaw</span></tt> to
<tt class="literal"><span class="pre">raw_input</span></tt>.</p>
</div>
<div class="section" id="to-2-21-2002">
<h2><a class="toc-backref" href="#id27" name="to-2-21-2002">0.7.1 (12/12/2001 to 2/21/2002)</a></h2>
<p>Fixed <tt class="literal"><span class="pre">OnChar()</span></tt> issues effecting European keyboards, as reported by
Jean-Michel Fauth.</p>
<p>Fixed <tt class="literal"><span class="pre">introspect.py</span></tt> issue with xmlrpc objects reported by Kevin
Altis.</p>
<p>Fixed some introspect/PyFilling issues with regard to Python 2.2.</p>
<p>Fixed font background color as reported by Keith J. Farmer. (Thanks)</p>
<p>Fixed problem with call tips and autocompletion inside multiline
commands as report by Kevin Altis.</p>
<p>Improved <tt class="literal"><span class="pre">OnKeyDown</span></tt> handling of cut/copy/paste operations based on
feedback from Syver Enstad. (Thanks)</p>
<p>Added a <tt class="literal"><span class="pre">shell.help()</span></tt> method to display some help info.</p>
<p>Changed sort of items in the namespace viewer to case insensitive.</p>
<p>Changed <tt class="literal"><span class="pre">attributes.sort(lambda</span> <span class="pre">x,</span> <span class="pre">y:</span> <span class="pre">cmp(x.upper(),</span> <span class="pre">y.upper()))</span></tt> in
advance of an upcoming fix to an autocompletion matching bug in wxSTC.</p>
<p>Improved support for ZODB by allowing namespace drilldown into BTrees.</p>
<p>Added <tt class="literal"><span class="pre">shell.PasteAndRun()</span></tt> to support pasting multiple commands into
the shell from the clipboard. Ctrl+Shift+V or v.</p>
<p>Enter now always processes a command (or copies down a previous one.)
To insert a line break, press Ctrl+Enter.</p>
<p>Escape key clears the current, unexecuted command.</p>
<p>History retrieval changed to replace current command. Added new keys
to insert from history - Shift+Up and Shift+Down.</p>
<p>Better call tips on objects with <tt class="literal"><span class="pre">__call__</span></tt> methods.</p>
<p>Improved call tip positioning calculation.</p>
</div>
<div class="section" id="to-12-11-2001">
<h2><a class="toc-backref" href="#id28" name="to-12-11-2001">0.7 (10/15/2001 to 12/11/2001)</a></h2>
<p>Changed how command history retrieval functions work. Added Alt-P,
Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.</p>
<p>Added full support for multi-line commands, similar to IDLE.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getAttributeNames()</span></tt> to do a case insensitive
sort.</p>
<p>Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and
Copy remove all prompts. Paste can handle prompted or not-prompted
text.</p>
<p>Added <tt class="literal"><span class="pre">CopyWithPrompts()</span></tt> method attached to Ctrl-Shift-C for those
times when you really do want all the prompts left intact.</p>
<p>Improved handling of the shell's read-only zone.</p>
<p>Changed <tt class="literal"><span class="pre">CrustFrame.__init__</span></tt> parameter spec to include all
parameters allowed by a <tt class="literal"><span class="pre">wxFrame</span></tt>.</p>
<p>Changed <tt class="literal"><span class="pre">FillingText</span></tt> to be read-only.</p>
<p>Renamed <tt class="literal"><span class="pre">PyCrust.py</span></tt> to <tt class="literal"><span class="pre">PyCrustApp.py</span></tt> to eliminate
package/module name conflicts that kept you from doing <tt class="literal"><span class="pre">from</span> <span class="pre">PyCrust</span>
<span class="pre">import</span> <span class="pre">shell</span></tt> inside files located in the <tt class="literal"><span class="pre">PyCrust</span></tt> directory.</p>
<p>Renamed <tt class="literal"><span class="pre">PyFilling.py</span></tt> to <tt class="literal"><span class="pre">PyFillingApp.py</span></tt> and <tt class="literal"><span class="pre">PyShell.py</span></tt> to
<tt class="literal"><span class="pre">PyShellApp.py</span></tt> to maintain consistency.</p>
<p>Removed the <tt class="literal"><span class="pre">__date__</span></tt> property from all modules.</p>
<p>Fixed bug in <tt class="literal"><span class="pre">introspect.getCallTip()</span></tt>, reported by Kevin Altis.</p>
</div>
<div class="section" id="to-10-12-2001">
<h2><a class="toc-backref" href="#id29" name="to-10-12-2001">0.6.1 (9/19/2001 to 10/12/2001)</a></h2>
<p>Changed <tt class="literal"><span class="pre">Shell.run()</span></tt> to always position to the end of existing
text, as suggested by Raul Cota.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getAllAttributeNames()</span></tt> to break circular
references in <tt class="literal"><span class="pre">object.__class__</span></tt>, which occurs in Zope/ZODB
extension classes.</p>
<p>Changed <tt class="literal"><span class="pre">filling.FillingTree.getChildren()</span></tt> to introspect extension
classes.</p>
<p>Fixed minor bugs in <tt class="literal"><span class="pre">introspect.getCallTip()</span></tt> that were interfering
with call tips for Zope/ZODB extension class methods.</p>
<p>In preparation for wxPython 2.3.2, added code to fix a font sizing
problem. Versions of wxPython prior to 2.3.2 had a sizing bug on Win
platform where the font was 2 points larger than what was specified.</p>
<p>Added a hack to <tt class="literal"><span class="pre">introspect.getAllAttributeNames()</span></tt> to &quot;wake up&quot;
ZODB objects that are asleep - in a &quot;ghost&quot; state. Otherwise it
returns incomplete info.</p>
</div>
<div class="section" id="to-9-12-2001">
<h2><a class="toc-backref" href="#id30" name="to-9-12-2001">0.6 (8/21/2001 to 9/12/2001)</a></h2>
<p>Added <tt class="literal"><span class="pre">PyFilling.py</span></tt> and <tt class="literal"><span class="pre">filling.py</span></tt>.</p>
<p><tt class="literal"><span class="pre">PyShell.py</span></tt> and <tt class="literal"><span class="pre">PyFilling.py</span></tt> can now be run standalone, as well
as <tt class="literal"><span class="pre">PyCrust.py</span></tt>.</p>
<p>Added <tt class="literal"><span class="pre">crust.py</span></tt> and moved some code from <tt class="literal"><span class="pre">PyCrust.py</span></tt> to it.</p>
<p>Added command history retrieval features submitted by Richie Hindle.</p>
<p>Changed <tt class="literal"><span class="pre">shell.write()</span></tt> to replace line endings with OS-specific
endings. Changed <tt class="literal"><span class="pre">shell.py</span></tt> and <tt class="literal"><span class="pre">interpreter.py</span></tt> to use
<tt class="literal"><span class="pre">os.linesep</span></tt> in strings having hardcoded line endings.</p>
<p>Added <tt class="literal"><span class="pre">shell.redirectStdin()</span></tt>, <tt class="literal"><span class="pre">shell.redirectStdout()</span></tt> and
<tt class="literal"><span class="pre">shell.redirectStderr()</span></tt> to allow the surrounding app to toggle
requests that the specified <tt class="literal"><span class="pre">sys.std*</span></tt> be redirected to the shell.
These can also be run from within the shell itself, of course.</p>
<p>The shell now adds the current working directory &quot;.&quot; to the search
path:</p>
<pre class="literal-block">
sys.path.insert(0, os.curdir)
</pre>
<p>Added support for distutils installations.</p>
</div>
<div class="section" id="to-8-20-2001">
<h2><a class="toc-backref" href="#id31" name="to-8-20-2001">0.5.4 (8/17/2001 to 8/20/2001)</a></h2>
<p>Changed default font size under Linux to:</p>
<pre class="literal-block">
'size' : 12,
'lnsize' : 10,
</pre>
<p>Changed <tt class="literal"><span class="pre">Shell</span></tt> to expect a parameter referencing an Interpreter
class, rather than an intepreter instance, to facilitate subclassing
of Interpreter, which effectively broke when the Editor class was
eliminated.</p>
<p>Fixed <tt class="literal"><span class="pre">PyCrustAlaCarte.py</span></tt>, which had been broken by previous
changes.</p>
<p>Created <tt class="literal"><span class="pre">InterpreterAlaCarte</span></tt> class as an example for use in the
demo.</p>
<p>Split <tt class="literal"><span class="pre">PyCrust.py</span></tt> into <tt class="literal"><span class="pre">PyCrust.py</span></tt> and <tt class="literal"><span class="pre">PyShell.py</span></tt> in
anticipation of <tt class="literal"><span class="pre">PyFilling.py</span></tt>.</p>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id32" name="id1">0.5.3 (8/16/2001)</a></h2>
<p>Added patch to <tt class="literal"><span class="pre">PyCrust.py</span></tt> to fix wxPython bug:</p>
<pre class="literal-block">
wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
</pre>
</div>
<div class="section" id="to-8-15-2001">
<h2><a class="toc-backref" href="#id33" name="to-8-15-2001">0.5.2 (8/14/2001 to 8/15/2001)</a></h2>
<p>Shortened module names by dropping &quot;PyCrust&quot; as a prefix.</p>
<p>Changed <tt class="literal"><span class="pre">version</span></tt> to <tt class="literal"><span class="pre">VERSION</span></tt> in <tt class="literal"><span class="pre">version</span></tt> module.</p>
<p>Added Options menu to PyCrust application.</p>
<p>Eliminated the Editor class (and editor module) by merging with Shell.
This means that Shell &quot;is a&quot; wxStyledTextCtrl rather than &quot;has a&quot;.
There just wasn't enough non-gui code to justify the separation.
Plus, Shell will be much easier for gui toolkits/designers to deal
with now.</p>
</div>
<div class="section" id="to-8-14-2001">
<h2><a class="toc-backref" href="#id34" name="to-8-14-2001">0.5.1 (8/10/2001 to 8/14/2001)</a></h2>
<p>Added <tt class="literal"><span class="pre">introspect</span></tt> module.</p>
<p>Moved some functionality from <tt class="literal"><span class="pre">PyCrustInterp</span></tt> to <tt class="literal"><span class="pre">introspect</span></tt>.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getRoot()</span></tt> to no longer remove whitespace from
the command. This was a remnant of a previous approach that, when
left as part of the current approach, turned out to be a really bad
thing.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getRoot()</span></tt> to allow commands of <tt class="literal"><span class="pre">''</span></tt>, <tt class="literal"><span class="pre">&quot;&quot;</span></tt>,
<tt class="literal"><span class="pre">&quot;&quot;&quot;&quot;&quot;&quot;</span></tt>, <tt class="literal"><span class="pre">[]</span></tt>, <tt class="literal"><span class="pre">()</span></tt>, and <tt class="literal"><span class="pre">{}</span></tt> to pass through. This allows
you to type them, followed by a dot, and get autocomplete options on
them.</p>
<p>Changed <tt class="literal"><span class="pre">introspect.getRoot()</span></tt> to identify some situations where
strings shouldn't be considered roots. For example:</p>
<pre class="literal-block">
&gt;&gt;&gt; import PyCrust # To illustrate the potential problem.
&gt;&gt;&gt; len('PyCrust.py')
</pre>
<p>Typing the dot at the end of &quot;PyCrust&quot; in the second line above should
NOT result in an autocompletion list because &quot;PyCrust&quot; is part of a
string in this context, not a reference to the PyCrust module object.
Similar reasoning applies to call tips. For example:</p>
<pre class="literal-block">
&gt;&gt;&gt; len('dir(')
</pre>
<p>Typing the left paren at the end of &quot;dir&quot; should NOT result in a call
tip.</p>
<p>Both features now behave properly in the examples given. However,
there is still the case where whitespace precedes the potential root
and that is NOT handled properly. For example:</p>
<pre class="literal-block">
&gt;&gt;&gt; len('this is a dir(')
</pre>
<p>and:</p>
<pre class="literal-block">
&gt;&gt;&gt; len('This is PyCrust.py')
</pre>
<p>More code needs to be written to handle more complex situations.</p>
<p>Added <tt class="literal"><span class="pre">locals=None</span></tt> parameter to <tt class="literal"><span class="pre">Shell.__init__()</span></tt>.</p>
<p>Added support for magic attribute retrieval. Users can change this
with:</p>
<pre class="literal-block">
&gt;&gt;&gt; shell.editor.autoCompleteIncludeMagic = 0
</pre>
<p>Added the ability to set filters on auto completion to exclude
attributes prefixed with a single or double underscore. Users can
exclude one or the other or both with:</p>
<pre class="literal-block">
&gt;&gt;&gt; shell.editor.autoCompleteExcludeSingle = 1
&gt;&gt;&gt; shell.editor.autoCompleteExcludeDouble = 1
</pre>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id35" name="id2">0.5 (8/8/2001)</a></h2>
<p>Mostly just a final version change before creating a release.</p>
</div>
<div class="section" id="to-8-7-2001">
<h2><a class="toc-backref" href="#id36" name="to-8-7-2001">0.4 (8/4/2001 to 8/7/2001)</a></h2>
<p>Changed version/revision handling.</p>
<p>Fixed bugs.</p>
</div>
<div class="section" id="to-8-3-2001">
<h2><a class="toc-backref" href="#id37" name="to-8-3-2001">0.3 (8/2/2001 to 8/3/2001)</a></h2>
<p>Removed lots of cruft.</p>
<p>Added lots of docstrings.</p>
<p>Imported to CVS repository at SourceForge.</p>
<p>Added call tips.</p>
</div>
<div class="section" id="to-8-2-2001">
<h2><a class="toc-backref" href="#id38" name="to-8-2-2001">0.2 (7/30/2001 to 8/2/2001)</a></h2>
<p>Renamed several files.</p>
<p>Added command autocompletion.</p>
<p>Added menus to PyCrust.py: File, Edit and Help.</p>
<p>Added sample applications: <tt class="literal"><span class="pre">PyCrustAlaCarte.py</span></tt>,
<tt class="literal"><span class="pre">PyCrustAlaMode.py</span></tt>, and <tt class="literal"><span class="pre">PyCrustMinimus.py</span></tt>.</p>
</div>
<div class="section" id="to-7-19-2001">
<h2><a class="toc-backref" href="#id39" name="to-7-19-2001">0.1 (7/1/2001 to 7/19/2001)</a></h2>
<p>Added basic syntax coloring much like Boa.</p>
<p>Added read-only logging much like IDLE.</p>
<p>Can retrieve a previous command by putting the cursor back on that
line and hitting enter.</p>
<p>Stdin and raw_input operate properly so you can now do <tt class="literal"><span class="pre">help()</span></tt> and
<tt class="literal"><span class="pre">license()</span></tt> without hanging.</p>
<p>Redefined &quot;quit&quot;, &quot;exit&quot;, and &quot;close&quot; to display a better-than-nothing
response.</p>
<p>Home key honors the prompt.</p>
<p>Created SourceForge account, but nothing was posted.</p>
</div>
<div class="section" id="in-the-beginning-there-was-pie-7-1-2001">
<h2><a class="toc-backref" href="#id40" name="in-the-beginning-there-was-pie-7-1-2001">In the beginning, there was pie... (7/1/2001)</a></h2>
<p>Blame it all on IDLE, Boa and PythonWin. I was using all three, got
frustrated with their dissimilarities, and began to let everyone know
how I felt. At the same time, Scintilla looked like an interesting
tool to build a shell around. And while I didn't receive much in the
way of positive feedback, let alone encouragement, I just couldn't let
go of the idea of a Scintilla-based Python shell. Then the PythonCard
project got to the point where they were talking about including a
shell in their development environment. That was all the incentive I
needed. PyCrust had to happen...</p>
</div>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -221,5 +221,5 @@ History of changes
This section lists all the changes that have been made to the Py
programs and modules, since the beginning.
.. include:: ../wxPython/py/CHANGES.txt
.. include:: ../wx/py/CHANGES.txt

66
wxPython/docs/README.html Normal file
View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document">
<div class="section" id="wxpython-readme">
<h1><a name="wxpython-readme">wxPython README</a></h1>
<p>Welcome to the wonderful world of wxPython!</p>
<p>So where do you go from here? The best thing to do is to run the demo
and use its source code to help you learn how to use wxPython. Most
of the classes available are demonstrated there, and you can view the
sources directly in the demo so it is designed to help you learn. If
you are on Windows or OS X then you can run the demo just by double
clicking it's icon. If you are on Linux/Unix then change to the
directory containing the demo and type:</p>
<blockquote>
python demo.py</blockquote>
<p>There are also some sample mini applications available for you to run
and to play with as a learning exercise.</p>
<p>The next thing you should do is join the wxPython-users maillist where
you can interact with a community of other users and developers who
are willing to help you learn, answer questions and solve problems.
To join the mail list just go to this web page and follow the
instructions there:</p>
<blockquote>
<a class="reference" href="http://wxpython.org/maillist.php">http://wxpython.org/maillist.php</a></blockquote>
<p>There is also a good set of class reference documentation available
for wxPython, but currently it is geared for the C++ user. This may
be a little daunting at first, but with a little practice you'll
easily be able to &quot;mentally translate&quot; from the C++ shown into Python.
(See <a class="reference" href="http://wiki.wxpython.org/index.cgi/C_2b_2bGuideForwxPythoneers">http://wiki.wxpython.org/index.cgi/C_2b_2bGuideForwxPythoneers</a>
for a little help on this process.) Not all classes documented are
available in Python, but most of the GUI related classes are.</p>
</div>
<div class="section" id="other-info">
<h1><a name="other-info">Other Info</a></h1>
<p>Please also see the following files:</p>
<blockquote>
<dl>
<dt>docs/CHANGES.txt Information about new features, fixes,</dt>
<dd>etc. in each release.</dd>
<dt>docs/BUILD.txt Instructions for building wxPython on</dt>
<dd>various Unix-like platforms, OS X or
Windows.</dd>
<dt>docs/MigrationGuide.txt Information about some big changes from 2.4</dt>
<dd>to 2.5 that require changes to your
applications</dd>
</dl>
<p>licence/* Text of the wxWindows license.</p>
</blockquote>
<p>--
Robin Dunn
<a class="reference" href="mailto:robin&#64;alldunn.com">robin&#64;alldunn.com</a></p>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -53,7 +53,7 @@ Please also see the following files:
-----------------
--
Robin Dunn
robin@alldunn.com

View File

@@ -1,6 +1,5 @@
[options]
[general]
output_encoding: iso-8859-1
source-link: 1
source_link: 0
datestamp: %Y-%m-%d %H:%M UTC
generator: 1
generator: 0

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>The wxPython wx Package</title>
<meta name="author" content="Patrick K. O'Brien" />
<meta name="author" content="Robin Dunn" />
<meta name="organization" content="Orbtech" />
<meta name="date" content="2003-07-02" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="the-wxpython-wx-package">
<h1 class="title">The wxPython wx Package</h1>
<h2 class="subtitle" id="or-how-to-survive-the-new-wx-namespace-changes">Or, how to survive the new wx namespace changes.</h2>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Patrick K. O'Brien</td></tr>
<tr><th class="docinfo-name">Author:</th>
<td>Robin Dunn</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
<tr><th class="docinfo-name">Organization:</th>
<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-07-02</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>1.2</td></tr>
</tbody>
</table>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#introduction" id="id2" name="id2">Introduction</a></li>
<li><a class="reference" href="#why-change-anything" id="id3" name="id3">Why change anything?</a></li>
<li><a class="reference" href="#what-does-the-new-wx-package-do" id="id4" name="id4">What does the new wx package do?</a></li>
<li><a class="reference" href="#will-any-of-this-effect-my-existing-code" id="id5" name="id5">Will any of this effect my existing code?</a></li>
<li><a class="reference" href="#what-about-all-the-other-modules-like-grid-html-and-stc" id="id6" name="id6">What about all the other modules, like grid, html, and stc?</a></li>
<li><a class="reference" href="#how-do-i-use-this-new-wx-package" id="id7" name="id7">How do I use this new wx package?</a></li>
<li><a class="reference" href="#what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package" id="id8" name="id8">What are the issues with converting old code to use the new wx package?</a></li>
<li><a class="reference" href="#where-can-i-find-example-programs-using-the-new-wx-syntax" id="id9" name="id9">Where can I find example programs using the new wx syntax?</a></li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id2" name="introduction">Introduction</a></h1>
<p>In the begining there was Python, and Python had modules, and Python
was good. But after a time Guido looked on Python and saw that Python
needed organizational assistance, and so Guido took code from Python's
side and created Packages and then Python was very good. About this
time wxPython was reborn, and wxPython used Packages, but being young
and trying to use a new technology wxPython did not know how to use
Packages effectivly. wxPython was good, but dreamed of being much
better...</p>
<p>Now many years later, after tons of code reorganization and build
hacking wxPython has reached that goal. In version 2.4.1 a prototype
of this new structure was introduced that dynamically built at import
time a new toplevel package named simply &quot;wx&quot; that contained all the
items from wxPython.wx but with the names edited to remove the wx
prefix. Now in 2.5 the final phase of that switcheroo has been
completed and the <em>real</em> classes, functions and constants are now
located in the wx package, leaving some compatibility modules in
wxPython.wx. This document should answer all the questions you might
have concerning the new wx package. Please also take a look at the
<a class="reference" href="MigrationGuide.html">2.5 Migration Guide</a> to see notes about other big differences in
this release.</p>
</div>
<div class="section" id="why-change-anything">
<h1><a class="toc-backref" href="#id3" name="why-change-anything">Why change anything?</a></h1>
<p>This change is being made for a couple of reasons. The first reason
is to discourage the use of <tt class="literal"><span class="pre">import</span> <span class="pre">*</span></tt>, which is a dangerous
technique that can create name conflicts and bloated namespaces.</p>
<p>The second reason is to remove what some perceive to be a &quot;wart.&quot; For
example, the following code is rather ugly in that the &quot;wx&quot; prefix on
the wxFrame class name is no longer useful when you're using the wx
module prefix:</p>
<pre class="literal-block">
from wxPython import wx
class Frame(wx.wxFrame)
</pre>
<p>The new wx package allows you to write code like this, instead:</p>
<pre class="literal-block">
import wx
class Frame(wx.Frame)
</pre>
<p>The third reason is that the wxWindows project has considered doing
the same thing (implement a new wx namespace and drop the &quot;wx&quot; prefix)
and we want wxPython to lead the way.</p>
</div>
<div class="section" id="what-does-the-new-wx-package-do">
<h1><a class="toc-backref" href="#id4" name="what-does-the-new-wx-package-do">What does the new wx package do?</a></h1>
<p>As mentioned in the Introduction, wxPython 2.4.1 introduced a way of
getting to this new syntax as quickly as possible. It would import
the old names (like &quot;wxFrame&quot;) from the old package and then create new
names in the wx package without the wx prefix, (like &quot;Frame&quot;.)
Starting with wxPython 2.5 the renaming is moved up to the wxPython
build step, so the real classes and etc. are actually named with the
new name (like &quot;Frame&quot;) and are located in the new wx package.</p>
<p>For compatibility the old wxPython package still exists, but now it is
populated with modules that simply import the new names and then
&quot;reverse-renames&quot; them to the old names. It probably sounds a bit
complicated, but it is mostly automated and so it doesn't cause
problems in most cases.</p>
</div>
<div class="section" id="will-any-of-this-effect-my-existing-code">
<h1><a class="toc-backref" href="#id5" name="will-any-of-this-effect-my-existing-code">Will any of this effect my existing code?</a></h1>
<p>No. Your existing code will continue to work and be supported for
some time. It will be up to you to decide when to switch to the new
syntax. But all new documentation and code examples will use the new
syntax. So don't wait too long. You wouldn't want anyone calling you
old-fashioned, would you?</p>
<p>When you import from wxPython.wx and use a class with the old name,
such as wxButton, you are actually using the wx.Button class. I
expect that the vast majority of the existing code should work fine
using this scheme. The only things that may cause problems is if your
old code is depending on some of the implemtation details, or if you
are using other things that have changed in the API. See the
<a class="reference" href="MigrationGuide.html">Migration Guide</a> for more details.</p>
</div>
<div class="section" id="what-about-all-the-other-modules-like-grid-html-and-stc">
<h1><a class="toc-backref" href="#id6" name="what-about-all-the-other-modules-like-grid-html-and-stc">What about all the other modules, like grid, html, and stc?</a></h1>
<p>There's more to the old wxPython than just the wxPython.wx module.
And we've got those extra modules covered as well. Each of those
modules (as well as the lib subpackage) has been moved to the new wx
package and reverse-renamers have been placed in the wxPython package
as needed.</p>
</div>
<div class="section" id="how-do-i-use-this-new-wx-package">
<h1><a class="toc-backref" href="#id7" name="how-do-i-use-this-new-wx-package">How do I use this new wx package?</a></h1>
<p>The wx package is automatically created when you install wxPython
version 2.4.1 or higher. So all you have to do is:</p>
<pre class="literal-block">
import wx
</pre>
</div>
<div class="section" id="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package">
<h1><a class="toc-backref" href="#id8" name="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package">What are the issues with converting old code to use the new wx package?</a></h1>
<p>Obviously, you need to change your import statements from:</p>
<pre class="literal-block">
from wxPython import wx
</pre>
<p>or:</p>
<pre class="literal-block">
from wxPython.wx import *
</pre>
<p>to:</p>
<pre class="literal-block">
import wx
</pre>
<p>Then you need to refer to wx attributes without a &quot;wx&quot; prefix, such
as:</p>
<pre class="literal-block">
class MyFrame(wx.Frame):
</pre>
<p>In most cases, existing code can be modified with a simple search and
replace.</p>
</div>
<div class="section" id="where-can-i-find-example-programs-using-the-new-wx-syntax">
<h1><a class="toc-backref" href="#id9" name="where-can-i-find-example-programs-using-the-new-wx-syntax">Where can I find example programs using the new wx syntax?</a></h1>
<p>Example programs are included in the wxPython/samples/wx_examples
directory, and are documented in the <a class="reference" href="wxPythonExamples.html">wxPythonExamples</a> documentation
file. Also, all the code in the py package uses the new wx syntax.
You can learn more about these in the <a class="reference" href="PyManual.html">PyManual</a>.</p>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -7,6 +7,7 @@
--------------------------------------------------
:Author: Patrick K. O'Brien
:Author: Robin Dunn
:Contact: pobrien@orbtech.com
:Organization: Orbtech_
:Date: $Date$
@@ -20,14 +21,29 @@
Introduction
============
Big things sometimes come in small packages. This is certainly true
of the new wx package, which is being introduced in wxPython 2.4.1 as
a way to allow the "wx" prefix to be dropped from the names of all
wxPython classes, functions, and constants. This document should
answer all the questions you might have concerning the new wx package.
If not, feel free to contact the author. I hope you like the new wx
package as much as I do.
In the begining there was Python, and Python had modules, and Python
was good. But after a time Guido looked on Python and saw that Python
needed organizational assistance, and so Guido took code from Python's
side and created Packages and then Python was very good. About this
time wxPython was reborn, and wxPython used Packages, but being young
and trying to use a new technology wxPython did not know how to use
Packages effectivly. wxPython was good, but dreamed of being much
better...
Now many years later, after tons of code reorganization and build
hacking wxPython has reached that goal. In version 2.4.1 a prototype
of this new structure was introduced that dynamically built at import
time a new toplevel package named simply "wx" that contained all the
items from wxPython.wx but with the names edited to remove the wx
prefix. Now in 2.5 the final phase of that switcheroo has been
completed and the *real* classes, functions and constants are now
located in the wx package, leaving some compatibility modules in
wxPython.wx. This document should answer all the questions you might
have concerning the new wx package. Please also take a look at the
`2.5 Migration Guide`_ to see notes about other big differences in
this release.
.. _2.5 Migration Guide: MigrationGuide.html
Why change anything?
====================
@@ -51,22 +67,27 @@ The new wx package allows you to write code like this, instead::
class Frame(wx.Frame)
The third reason is that the wxWindows project intends to do the same
thing (implement a new wx namespace and drop the "wx" prefix) and we
want wxPython to lead the way.
The third reason is that the wxWindows project has considered doing
the same thing (implement a new wx namespace and drop the "wx" prefix)
and we want wxPython to lead the way.
What does the new wx package do?
================================
As a way of getting to this new syntax as quickly as possible, the
code in this new wx package was created. What it does is alter the
existing wx namespace dynamically. By making the changes on-the-fly
at runtime, we can try out the new syntax before any permanent changes
are made to the underlying class library. The downside of making
these changes at runtime is that there is a slight delay when you
``import wx``; the upside is that you can start using the new syntax
now.
As mentioned in the Introduction, wxPython 2.4.1 introduced a way of
getting to this new syntax as quickly as possible. It would import
the old names (like "wxFrame") from the old package and then create new
names in the wx package without the wx prefix, (like "Frame".)
Starting with wxPython 2.5 the renaming is moved up to the wxPython
build step, so the real classes and etc. are actually named with the
new name (like "Frame") and are located in the new wx package.
For compatibility the old wxPython package still exists, but now it is
populated with modules that simply import the new names and then
"reverse-renames" them to the old names. It probably sounds a bit
complicated, but it is mostly automated and so it doesn't cause
problems in most cases.
Will any of this effect my existing code?
@@ -78,55 +99,25 @@ syntax. But all new documentation and code examples will use the new
syntax. So don't wait too long. You wouldn't want anyone calling you
old-fashioned, would you?
When you import from wxPython.wx and use a class with the old name,
such as wxButton, you are actually using the wx.Button class. I
expect that the vast majority of the existing code should work fine
using this scheme. The only things that may cause problems is if your
old code is depending on some of the implemtation details, or if you
are using other things that have changed in the API. See the
`Migration Guide`_ for more details.
How does the new wx package work?
=================================
It's pretty simple, and pretty clever. The wx directory contains an
``__init__.py`` file, making it a Python package. (In contrast, the
old wxPython.wx module is a module, not a package.) When you ``import
wx`` the code in the ``__init__.py`` file is executed, and that's
where all the magic takes place. Let's take a look at the code inside
the ``__init__.py`` file:
.. include:: ../wx/__init__.py
:literal:
Namespaces in Python are implemented as dictionaries. The dictionary
used to create the wx package's namespace is accessible using the
``globals()`` function. The dictionary used to create the old
wxPython.wx module's namespace is ``wx.__dict__``. Once we have these
two dictionaries, it's a simple matter of iterating through one,
changing the names, adding the renamed object to the other dictionary,
and cleaning up a few local variables and imported modules. Voila!
.. _Migration Guide: MigrationGuide.html
What about all the other modules, like grid, html, and stc?
===========================================================
There's more to wxPython than just the wx namespace. And we've got
those extra modules covered as well. For each of those modules (as
well as the lib package) we've got matching modules in the new wx
package. Let's take a look at a few of them.
Here is ``html.py``:
.. include:: ../wx/html.py
:literal:
And here is ``lib/dialogs.py``:
.. include:: ../wx/lib/dialogs.py
:literal:
As you can see, they both rely on the ``prefix.rename()`` function
defined in ``prefix.py``:
.. include:: ../wx/prefix.py
:literal:
Again, the technique is very similar to the one used by the wx
package.
There's more to the old wxPython than just the wxPython.wx module.
And we've got those extra modules covered as well. Each of those
modules (as well as the lib subpackage) has been moved to the new wx
package and reverse-renamers have been placed in the wxPython package
as needed.
How do I use this new wx package?
@@ -161,11 +152,6 @@ as::
In most cases, existing code can be modified with a simple search and
replace.
One extra issue you might run into when converting existing code is
that the wx.__version__ attribute is no longer available, since the
new wx namespace doesn't include any private attributes from the old
wxPython.wx namespace. The solution is to use the wx.VERSION_STRING
attribute, which was introduced in wxPython 2.4.1.
Where can I find example programs using the new wx syntax?

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>wxPython Documentation</title>
<meta name="author" content="Patrick K. O'Brien" />
<meta name="organization" content="Orbtech" />
<meta name="date" content="2003-07-02" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="wxpython-documentation">
<h1 class="title">wxPython Documentation</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Patrick K. O'Brien</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
<tr><th class="docinfo-name">Organization:</th>
<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-07-02</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>1.2</td></tr>
</tbody>
</table>
<div class="section" id="wxpython-manual">
<h1><a name="wxpython-manual">wxPython Manual</a></h1>
<p><a class="reference" href="wxPythonManual.html">The wxPython Manual</a> is a reference to the wxPython toolkit.</p>
</div>
<div class="section" id="wxpython-developer-reference">
<h1><a name="wxpython-developer-reference">wxPython Developer Reference</a></h1>
<p><a class="reference" href="http://www.orbtech.com/www/wx/epydoc/">The wxPython source code documentation</a> is for developers, and was
created using the Epydoc tool.</p>
</div>
<div class="section" id="wxpython-tutorial">
<h1><a name="wxpython-tutorial">wxPython Tutorial</a></h1>
<p><a class="reference" href="wxPythonTutorial.html">The wxPython Tutorial</a> will help get you started with wxPython.</p>
</div>
<div class="section" id="wxpython-examples">
<h1><a name="wxpython-examples">wxPython Examples</a></h1>
<p><a class="reference" href="wxPythonExamples.html">The wxPython Examples</a> illustrates example programs using wxPython.</p>
</div>
<div class="section" id="wx-package">
<h1><a name="wx-package">wx Package</a></h1>
<p><a class="reference" href="wxPackage.html">The wxPython wx Package</a> explains the new prefix-less wx package.</p>
</div>
<div class="section" id="py-manual">
<h1><a name="py-manual">Py Manual</a></h1>
<p><a class="reference" href="PyManual.html">The Py Manual</a> documents the Py collection of programs and source
code modules, including:</p>
<ul class="simple">
<li>PyAlaCarte</li>
<li>PyAlaMode</li>
<li>PyCrust</li>
<li>PyFilling</li>
<li>PyShell</li>
<li>PyWrap</li>
</ul>
</div>
<div class="section" id="py-developer-reference">
<h1><a name="py-developer-reference">Py Developer Reference</a></h1>
<p><a class="reference" href="http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html">The Py source code documentation</a> is for developers, and was created
using the Epydoc tool.</p>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

View File

@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>Example Programs Using wxPython</title>
<meta name="author" content="Patrick K. O'Brien" />
<meta name="organization" content="Orbtech" />
<meta name="date" content="2003-07-02" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="example-programs-using-wxpython">
<h1 class="title">Example Programs Using wxPython</h1>
<h2 class="subtitle" id="a-survival-guide-for-the-post-wx-prefixed-world">A survival guide for the post-wx-prefixed world.</h2>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Patrick K. O'Brien</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
<tr><th class="docinfo-name">Organization:</th>
<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-07-02</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>1.2</td></tr>
</tbody>
</table>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
<li><a class="reference" href="#background-with-tongue-firmly-in-cheek" id="id2" name="id2">Background (with tongue firmly in cheek)</a></li>
<li><a class="reference" href="#basic-program-example" id="id3" name="id3">Basic Program Example</a></li>
<li><a class="reference" href="#hello-wxpython-example" id="id4" name="id4">Hello wxPython Example</a></li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
<p>This document illustrates example programs using wxPython. All the
examples make use of the new wx package syntax introduced in wxPython
2.4.1, which is a bit different than older examples you might come
across.</p>
</div>
<div class="section" id="background-with-tongue-firmly-in-cheek">
<h1><a class="toc-backref" href="#id2" name="background-with-tongue-firmly-in-cheek">Background (with tongue firmly in cheek)</a></h1>
<p>If something hits you on the head, don't run around screaming that the
sky is falling. Instead, take a close look and see if it wasn't a
&quot;wx&quot; prefix that hit you. Apparently, they're dropping off wxPython
class names like flies dropping dead in the scorching heat of a
summer's day.</p>
<p>Yes, the world is changing, and even our little wxPython world must
change with it. Then again, I'm not fond of pesky summertime flies,
and I'm not too upset that the &quot;wx&quot; prefixes are going to bite the
dust. I think it's for the best. But, being the kind, considerate
person that I am, I decided to write this guide to make the wx
namespace transition easier for everyone, even Chicken Little.</p>
<div class="note">
<p class="admonition-title">Note</p>
<p>Say what?</p>
<p>If you have no idea what I mean by the &quot;wx namespace transition,&quot;
consider yourself lucky. You can simply use these examples to
learn wxPython in its current state (beginning with wxPython
version 2.4.1). All you need to know is that previous wxPython
code used a slightly different syntax that some folks (including
me) considered ugly. So we changed it. And that's when the sky
starting falling...</p>
<p>If you want more of the technical details, read the <a class="reference" href="wxPackage.html">wx package
documentation</a>.</p>
</div>
<p>Rather than simply <strong>tell</strong> you that everything will be okay, I
decided to <strong>show</strong> you that everything will be okay. To do that,
I've created a bunch of example programs using the new wx package. I
hope you like them.</p>
</div>
<div class="section" id="basic-program-example">
<h1><a class="toc-backref" href="#id3" name="basic-program-example">Basic Program Example</a></h1>
<p>It doesn't get much simpler than this. Every wxPython program needs
an application and a frame. To encourage good coding habits, I've
split them into separate modules. They don't do much, but they're a
good starting point.</p>
<p>I include a simple App class in the frame module because the PyWrap
&quot;wrapper&quot; utility (<tt class="literal"><span class="pre">pywrap</span></tt>) only works with modules that contain an
application class. So including a simple one in each of your frame
modules allows you to use the PyWrap runtime wrapper and debug your
frames independent of your full application.</p>
<p>Here is the module (<tt class="literal"><span class="pre">frame.py</span></tt>) that defines the frame class:</p>
<pre class="literal-block">
#!/usr/bin/env python
&quot;&quot;&quot;Basic frame class, with App for testing.&quot;&quot;&quot;
__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
__cvsid__ = &quot;$Id$&quot;
__revision__ = &quot;$Revision$&quot;[11:-2]
import wx
class Frame(wx.Frame):
&quot;&quot;&quot;Frame class.&quot;&quot;&quot;
def __init__(self, parent=None, id=-1, title='Title',
pos=wx.DefaultPosition, size=(400, 200)):
&quot;&quot;&quot;Create a Frame instance.&quot;&quot;&quot;
wx.Frame.__init__(self, parent, id, title, pos, size)
class App(wx.App):
&quot;&quot;&quot;Application class.&quot;&quot;&quot;
def OnInit(self):
self.frame = Frame()
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
</pre>
<p>And here is the module (<tt class="literal"><span class="pre">app.py</span></tt>) that defines the application class
and imports the frame from <tt class="literal"><span class="pre">frame.py</span></tt>:</p>
<pre class="literal-block">
#!/usr/bin/env python
&quot;&quot;&quot;Basic application class.&quot;&quot;&quot;
__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
__cvsid__ = &quot;$Id$&quot;
__revision__ = &quot;$Revision$&quot;[11:-2]
import wx
from frame import Frame
class App(wx.App):
&quot;&quot;&quot;Application class.&quot;&quot;&quot;
def OnInit(self):
self.frame = Frame()
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
</pre>
</div>
<div class="section" id="hello-wxpython-example">
<h1><a class="toc-backref" href="#id4" name="hello-wxpython-example">Hello wxPython Example</a></h1>
<p>This program displays an image file (<tt class="literal"><span class="pre">wxPython.jpg</span></tt>) inside a frame
sized to match the graphic.</p>
<div class="figure">
<p><img alt="screenshots/hello-win98.png" scale="100" src="screenshots/hello-win98.png" /></p>
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Windows.</p>
</div>
<div class="figure">
<p><img alt="screenshots/hello-linux.png" scale="100" src="screenshots/hello-linux.png" /></p>
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Linux.</p>
</div>
<div class="figure">
<p><img alt="screenshots/hello-mac.png" scale="100" src="screenshots/hello-mac.png" /></p>
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Mac OS X.</p>
</div>
<p>Here is the source code for <tt class="literal"><span class="pre">hello.py</span></tt>:</p>
<pre class="literal-block">
#!/usr/bin/env python
&quot;&quot;&quot;Hello, wxPython! program.&quot;&quot;&quot;
__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
__cvsid__ = &quot;$Id$&quot;
__revision__ = &quot;$Revision$&quot;[11:-2]
import wx
class Frame(wx.Frame):
&quot;&quot;&quot;Frame class that displays an image.&quot;&quot;&quot;
def __init__(self, image, parent=None, id=-1,
pos=wx.DefaultPosition, title='Hello, wxPython!'):
&quot;&quot;&quot;Create a Frame instance and display image.&quot;&quot;&quot;
temp = image.ConvertToBitmap()
size = temp.GetWidth(), temp.GetHeight()
wx.Frame.__init__(self, parent, id, title, pos, size)
self.bmp = wx.StaticBitmap(parent=self, id=-1, bitmap=temp)
class App(wx.App):
&quot;&quot;&quot;Application class.&quot;&quot;&quot;
def OnInit(self):
wx.InitAllImageHandlers()
image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
self.frame = Frame(image)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
</pre>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
<title>The wxPython Tutorial</title>
<meta name="author" content="Patrick K. O'Brien" />
<meta name="organization" content="Orbtech" />
<meta name="date" content="2003-07-02" />
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document" id="the-wxpython-tutorial">
<h1 class="title">The wxPython Tutorial</h1>
<h2 class="subtitle" id="how-to-get-up-and-running-with-wxpython">How to get up and running with wxPython</h2>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Patrick K. O'Brien</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
<tr><th class="docinfo-name">Organization:</th>
<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-07-02</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>1.2</td></tr>
<tr class="field"><th class="docinfo-name">License:</th><td class="field-body">wxWindows Free Documentation Licence, Version 3</td>
</tr>
</tbody>
</table>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
<li><a class="reference" href="#what-is-wxpython" id="id2" name="id2">What is wxPython?</a></li>
<li><a class="reference" href="#license" id="id3" name="id3">License</a></li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
<p>This is a tutorial for the wxPython GUI toolkit. It uses the new wx
package syntax that was introduced in wxPython 2.4.1.</p>
</div>
<div class="section" id="what-is-wxpython">
<h1><a class="toc-backref" href="#id2" name="what-is-wxpython">What is wxPython?</a></h1>
<p>wxPython is a GUI toolkit for the Python programming language. It
allows Python programmers to create programs with a graphical user
interface for Windows, Linux, and Mac OS X.</p>
</div>
<div class="section" id="license">
<h1><a class="toc-backref" href="#id3" name="license">License</a></h1>
<p>This document adheres to the same license as the other documentation
that comes with wxWindows:</p>
<pre class="literal-block">
wxWindows Free Documentation Licence, Version 3
===============================================
Copyright (c) 1998 Julian Smart, Robert Roebling et al
Everyone is permitted to copy and distribute verbatim copies
of this licence document, but changing it is not allowed.
WXWINDOWS FREE DOCUMENTATION LICENCE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1. Permission is granted to make and distribute verbatim copies of this
manual or piece of documentation provided any copyright notice and this
permission notice are preserved on all copies.
2. Permission is granted to process this file or document through a
document processing system and, at your option and the option of any third
party, print the results, provided a printed document carries a copying
permission notice identical to this one.
3. Permission is granted to copy and distribute modified versions of this
manual or piece of documentation under the conditions for verbatim
copying, provided also that any sections describing licensing conditions
for this manual, such as, in particular, the GNU General Public Licence,
the GNU Library General Public Licence, and any wxWindows Licence are
included exactly as in the original, and provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.
4. Permission is granted to copy and distribute translations of this
manual or piece of documentation into another language, under the above
conditions for modified versions, except that sections related to
licensing, including this paragraph, may also be included in translations
approved by the copyright holders of the respective licence documents in
addition to the original English.
WARRANTY DISCLAIMER
5. BECAUSE THIS MANUAL OR PIECE OF DOCUMENTATION IS LICENSED FREE OF CHARGE,
THERE IS NO WARRANTY FOR IT, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
PARTIES PROVIDE THIS MANUAL OR PIECE OF DOCUMENTATION &quot;AS IS&quot; WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
THE MANUAL OR PIECE OF DOCUMENTATION IS WITH YOU. SHOULD THE MANUAL OR
PIECE OF DOCUMENTATION PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
6. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE MANUAL OR PIECE OF DOCUMENTATION AS PERMITTED ABOVE, BE
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
MANUAL OR PIECE OF DOCUMENTATION (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF A PROGRAM BASED ON THE MANUAL OR PIECE OF
DOCUMENTATION TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
</pre>
</div>
</div>
<hr class="footer" />
<div class="footer">
Generated on: 2004-02-04 23:31 UTC.
</div>
</body>
</html>