ctypes 0.9.6 released - Mar 18, 2005
ctypes is an advanced ffi (Foreign Function Interface) package for
Python 2.3 and higher.
ctypes allows to call functions exposed from dlls/shared libraries
and has extensive facilities to create, access and manipulate
simple and complicated C data types in Python - in other words:
wrap libraries in pure Python. It is even possible to implement C
callback functions in pure Python.
ctypes now includes a code generator toolchain which allows
automatic creation of library wrappers from C header files.
This feature is still experimental and beta quality.
ctypes runs on Windows, MacOS X, Linux, Solaris, FreeBSD, OpenBSD.
It may also run on other systems, provided that libffi supports
For windows, ctypes contains a ctypes.com package which allows to
call and implement custom COM interfaces.
If you download the source distribution, please choose the ZIP
file for Windows, and the .tar.gz file for other machines.
These archive have different contents!
There have been lots of changes - if you are the author or user of
a package that uses ctypes, please test it with this release
and report problems on the ctypes-users mailing list.
Changes in 0.9.6
Thanks to all of you who reported bugs so quickly, and those who
tried out the codegenerator toolchain.
- keyword arguments in Structure/Union initializers had no effect.
- it was impossible to override the from_parm class method
in subclasses of c_void_p, c_char_p, and c_wchar_p.
- removed the __del__ method of _CDLL. It caused uncollectable
garbage in Python's gc.
- ctypes.com.register: enclose the Python script to run a com
server in quotes, otherwise it won't run correctly when the
directory name contains spaces.
- Several changes have been made to the h2xml script from the
codegenerator toolchain. See the documentation (linked below) for
Additions in 0.9.5
New package ctypes.wrap. This contains decorators usable for
easier creation of wrapper functions.
This package also contains a toolchain for (semi)automatic
creation of wrappers for external libraries - it can parse
C header files and generate ctypes code for the declarations in
them. It can even handle preprocessor definitions! For details,
Changes in 0.9.5
On systems where sizeof(int) == sizeof(long), c_int/c_long and
c_uint/c_ulong are now aliases. Similar for c_long/c_longlong and
c_ulong/c_ulonglong. This prevents unneeded type errors.
If an exception occurs in a callback function, a full traceback is
now printed. Raising SystemExit in a callback function now
correctly exists Python.
HRESULT is now a proper ctype - no longer a function. This allows
to use it in the argtypes sequence for function prototypes.
An easier way to define structures and unions that reference
themselves, or have dependencies to other data types. The
_fields_ attribute can now be set *after* the Structure/Union
class has been created. This makes the SetPointerType function
The semantics of the _fields_ attribute in sub-subclasses of
Structure and Union has been fixed. The baseclasses _fields_ list
is extended, not replaced, in subclasses. Assigning _fields_ when
it is no longer possible raises an error now.
Structures and unions now work as restype and in the argtypes list
An important bug has been fixed with pointers.
Detailed changelogs are in CVS:
Downloads are available in the sourceforge files section
Separate source distributions are available for windows and non-windows systems.
Please use the .zip file for Windows (it contains the ctypes.com framework),
and use the .tar.gz file for non-Windows systems (it contains the
complete cross-platform libffi sources).
Binary windows installers, which contain compiled extension
modules, are also available, be sure to download the correct one
for the Python version you are using.
I'm pleased to announce the twenty-third development release of PythonCAD,
a CAD package for open-source software users. As the name implies,
PythonCAD is written entirely in Python. The goal of this project is
to create a fully scriptable drafting program that will match and eventually
exceed features found in commercial CAD software. PythonCAD is released
under the GNU Public License (GPL).
PythonCAD requires Python 2.2 or newer. The interface is GTK 2.0
based, and uses the PyGTK module for interfacing to GTK. The design of
PythonCAD is built around the idea of separating the interface
from the back end as much as possible. By doing this, it is hoped
that both GNOME and KDE interfaces can be added to PythonCAD through
usage of the appropriate Python module. Addition of other PythonCAD
interfaces will depend on the availability of a Python module for that
particular interface and developer interest and action.
The twenty-third release contains a several bug fixes, the largest of
which is the correct restoration of dimension string text properties when
the deletion of a dimension is undone. Another fix included in this release
is the removal of some deprecated constants flagged by the 2.6 PyGTK
release when they are encountered. This release also features the
beginnings of the scripting enhancements planned for PythonCAD. The
evaluation of user-entered expressions is now more powerful by utilizing
Python's exec keyword and invoking the eval() command with an argument
storing variables to be utilized during expression evaluation. More
enhancements and improvements in expression evaluation and overall
scriptability will appear in future releases.
A mailing list for the development and use of PythonCAD is available.
Visit the following page for information about subscribing and viewing
the mailing list archive:
Visit the PythonCAD web site for more information about what PythonCAD
does and aims to be:
Come and join me in developing PythonCAD into a world class drafting
Man once surrendering his reason, has no remaining guard against absurdities
the most monstrous, and like a ship without rudder, is the sport of every wind.
-Thomas Jefferson to James Smith, 1822
On behalf of the Python development team and the Python community, I'm
happy to announce the release of Python 2.4.1 (release candidate 2).
Python 2.4.1 is a bug-fix release. See the release notes at the website
(also available as Misc/NEWS in the source distribution) for details of
the bugs squished in this release.
Assuming no major problems crop up, a final release of Python 2.4.1 will
be out around the 29th of March - straight after PyCon.
For more information on Python 2.4.1, including download links for
various platforms, release notes, and known issues, please see:
Highlights of this new release include:
- Bug fixes. According to the release notes, several dozen bugs
have been fixed, including a fix for the SimpleXMLRPCServer
security issue (PSF-2005-001).
- A handful other bugs discovered in the first release candidate
have been fixed in this version.
Highlights of the previous major Python release (2.4) are available
from the Python 2.4 page, at
Enjoy the new release,
Python Release Manager
(on behalf of the entire python-dev team)
Boa Constructor 0.4.0 has been released and is available from the
SourceForge file download page.
The main focus of the release is wxPython 2.5 compatibility
and source generation for the GUI designer.
This release requires wxPython 2.5 to run.
wxPython 2.4 is no longer supported, but there is a code
upgrading tool provided to help upgrade from wxPython 2.4
to wxPython 2.5.
A special thanks to Werner Bruhin for updating the tutorial
and the code upgrading tool (started by Paul Sorenson).
The PyCon organizers have created a mailing list for PyCon 2005 attendees:
We've subscribed attendees we had email addresses for. If you are
attending PyCon and haven't received a welcome message, then we probably
don't have your email address and you should subscribe to get last
minute information. Alternatively, you can keep an eye on the
We'll remove this list a week or two after PyCon.
(P.S. The subsciber list for this mailing list is only viewable by the
Jim Fulton mailto:email@example.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.comhttp://www.zope.org
effbot.org proudly presents release 1.0.2 of the cElementTree library,
a fast and very efficient implementation of the ElementTree API, for
Python 2.1 and later. On typical documents, it's 15-20 times faster
than the Python version of ElementTree, and uses 2-5 times less
cElementTree 1.0.2 is 1.0.1 plus the missing "iselement" function, and
a couple of minor tweaks and bug fixes.
The library is available as C source code, and as Windows installers
for all recent Python versions. Get your copy here:
The cElementTree module uses some support functions from the standard
ElementTree library, and will not work properly without it. If you haven't
installed it already, you can get it from:
The Element type is a simple but flexible container object, designed
to store hierarchical data structures, such as simplified XML infosets,
in memory. The ElementTree package provides a Python implementation
of this type, plus code to serialize element trees to and from XML files.
ElementTree 1.2.6 is a maintenance release, consisting of 1.2.5 plus a
fix for proper expansion of entities defined in internal DTD:s, minor fixes
in the HTML parser, and proper serialization also if Python's default
encoding has been changed.
You can get the ElementTree package from:
Documentation, code samples, and pointers to articles about the Element-
Tree package are available from:
Leo 4.3 alpha 4 is now available at http://sourceforge.net/projects/leo/
Leo 4.3 is the culmination of more than five months of work. This alpha 4
focuses on plugins: all known plugins are now in leoPlugins.leo. Most
plugins now work with the 4.3 code base.
This alpha 4 release also adds the frequently-requested Add Comments and
Delete Comments commands to Leo's Edit Body menu.
The defining features of Leo 4.3:
1. Leo now stores options in @settings trees, that is, outlines whose
headline is '@settings'. When opening a .leo file, Leo looks for @settings
trees not only in the outline being opened but also in various
leoSettings.leo files. Users can create arbitrarily complex user options
with @settings trees.
2. The Preferences command temporarily replaces the outline pane with an
outline showing all the @settings trees in effect. The Preferences command
also replaces the body pane with a "settings pane". This settings pane
allows you to change the settings selected in the outline pane using
standard gui widgets.
3. Leo's read/write code in leoAtFile.py has been rewritten to support
user-defined tangling and untangling. This is a major cleanup of Leo's core.
4. Leo now contains an excellent Plugins Manager plugin. This plugin enables
and disables plugins automatically and tells you everything you need to know
about each plugin. This plugin also lets you download plugins from Leo's cvs
5. You can install third-party extensions in Leo's extensions directory. Leo
will attempt to import such extensions from the extensions directory when
normal imports fail. The distribution contains Python Mega Widgets in the
What people are saying about Leo
"Word outlines are very useful. But Leo makes Word look like a clunky
toy." --Joe Orr
"Leo is an interactive editor for organizing text fragments hierarchically
and sequentially into one or more files and hierarchical folders, without
arbitrary limits on the number and size of text fragments and the depth of
the hierarchy...Tangle is a tool for combining hierarchically and
sequentially organized text fragments into text files, hierarchically
grouped into folders, with hierarchical or sequential organization of text
within the files, and without arbitrary limits on the size and number of
files and the depth of the hierarchy of folders and text nesting within the
files." -- Alex Abacus
"Leo reminds me a great deal of things I loved when I used Userland's
Frontier (an outlining cms with a native oodb) - but Frontier wasn't
hackable enough for me, and it wasn't oriented towards coding and literate
programming, and you couldn't round-trip rendered pages (big Leo win). This
is really a super tool - in a matter of days I've started to use it on all
my projects and I still haven't figured out how I lived without it." -- John
"Leo is EXACTLY the kind of outliner I was looking for--fantastic job!" --
"If you are like me, you have a kind of knowledge base with infos gathered
over time. And you have projects, where you use some of those infos. Now,
with conventional outliners you begin to double these infos, because you
want to have the infos needed for the project with your project. With Leo
you can do this too, but if you change text in one place IT IS UPDATED IN
THE OTHER PLACE TOO! This is a feature I did not see with any other outliner
(and I tried a few). Amazing! Leo directly supports the way I work!" -- F.
More quotes at: http://webpages.charter.net/edreamleo/testimonials.html
What makes Leo special?
- Leo's outlines add a new dimension to programming.
- Leo shows you your code and data the way _you_ want to see them.
- Leo extends, completes and simplifies literate programming.
- Leo's script buttons bring scripts to data.
What is Leo?
- A programmer's editor, an outlining editor and a flexible browser.
- A literate programming tool, compatible with noweb and CWEB.
- A data organizer and project manager. Leo provides multiple views
of projects within a single outline.
- Fully scriptable using Python. Leo saves its files in XML format.
- Portable. leo.py is 100% pure Python.
- Open Software, distributed under the Python License.
Leo requires Python 2.2.1 or above and tcl/tk 8.4 or above.
Leo works on Linux, Windows and MacOs X.
Edward K. Ream email: edreamleo(a)charter.net
Leo: Literate Editor with Outlines
PyCon 2005 is just around the corner. PyCon is a great place to meet
and collaborate with your colleagues. A great way to collaborate at
PyCon is through sprints.
A sprint is a multi-day session of intense development organized
around extreme programming (XP) ideas such as pair programming.
There will be four days, March 19-22, before the regular conference
to sprint on a variety of projects. To see what sprints are
There is also useful logistical information there!
If you would like to lead a sprint, feel free to add the sprint
to that page. If you want to participate in a sprint, visit
a sprint-topic page and add your name to the list of attendees so
that we know how many people are coming.
If you have a question about the sprints, feel free to drop me
a line at jim(a)zope.com.
Note that you don't have to attend PyCon to participate in a sprint.
Jim Fulton mailto:firstname.lastname@example.org Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.comhttp://www.zope.org
I'm pleased to announce the 126.96.36.199 release of wxPython, now available
for download at http://wxpython.org/download.php
What is wxPython?
wxPython is a GUI toolkit for the Python programming language. It
allows Python programmers to create programs with a robust, highly
functional graphical user interface, simply and easily. It is
implemented as a Python extension module that wraps the GUI components
of the popular wxWidgets cross platform library, which is written in
wxPython is a cross-platform toolkit. This means that the same program
will usually run on multiple platforms without modifications.
Currently supported platforms are 32-bit Microsoft Windows, most Linux
or other Unix-like systems using GTK or GTK2, and Apple Macintosh OS
Changes in 188.8.131.52
wx.Sizer Add, Insert, and Prepend functions now return a reference to the
wx.SizerItem that was added to the sizer, and the wx.SizerItem has a
GetRect accessor to give the position of the item on the parent window.
Added wx.Sizer.GetItem method which returns the wx.SizerItem for the given
wx.Window, wx.Sizer or position index.
wxMSW: wx.RadioButtons in the same group no longer have to be
consecutive (there may be intervening controls). Without this fix, an
out-of-sync assert is generated when clicking on a radio button and
then calling GetValue().
Some XRC changes:
- Added 'icon' property to wxFrame and wxDialog
- No longer ignores menu bitmaps on non-MSW platforms
- Notebook page bitmaps are now supported
- added system colours and fonts support (based on patch #1038207)
wxMSW: fix for [ 1052989 ] TextCtrl.SetBackgroundColour(wx.NullColour)
Added wx.PasswordEntryDialog analagous to wx.TextEntryDialog, allows
detecting entering an empty string vs. cancel unlike the
wx.GetPasswordFromUser dialog function.
OGL patch from Shane Holloway:
Two simple problems found in the new python ogl code. First is
the patch for _canvas.py. Essentially::
dx = abs(dc.LogicalToDeviceX(x - self._firstDragX))
dy = abs(dc.LogicalToDeviceY(y - self._firstDragY))
was incorrect because (x,y) and (self._firstDragX,
self._firstDragY) are both already in Logical coordinates.
Therefore the difference between the two is also in logical
coordinates, and the conversion call is an error. This bug
surfaces when you have OGL on a scrollwin, and you are far from
the origin of the canvas.
The second change in _composit.py basically removes the assumption
that the child is in both self._children and self._divisions.
Causes many problems when it's not. ;)
Fixed GetSaveData and SetSaveData in wx.lib.multisash to not depend on
the default way that class objectss are converted to strings.
Fixed problem in StyledTextCtrl.Set[HV]ScrollBar that could leave the
internal scrollbar visible.
Added wx.StandardPaths which provides methods for determining standard
system paths for each platform.
wxMSW: The window background is now only erased by default if the
background colour or background mode has been changed. This better
allows the default system themed behaviour to show through for
uncustomized windows. Explicit support added for using the correct
theme texture for wx.Notebook pages and their children.
wx.Image: Added support for alpha channels in interpolated and
non-interpolated image rotation. Added ConvertAlphaToMask helper
method for turning shades of grey into shades of alpha and a colour.
wxGTK2: Reimplemented DoDrawRotatedText() by way of a rotation of an
alpha blended text bitmap. It would be better if Pango could draw
directly into an wxImage (as FreeType can,) but that is for later...
Added wrappers and a demo for the wx.MediaCtrl class, which can play
various forms of audio/video media using native codecs install on the
system. So far it is only implemented for Windows and OSX.
wxGTK: Patch applied for Freeze()/Thaw() for wxTextCtrtl.
Added "gravity" for splitter window (patch 1046105). Gravity is a
floating-point factor between 0.0 and 1.0 which controls position of
sash while resizing the wx.SplitterWindow. The gravity specifies
how much the left/top window will grow while resizing.
wxMSW: wx.Slider's C++ implementation rewritten to be more
maintainable and hopefully less buggy. The position of the labels has
also been changed in order to better comply with Microsoft's examples
of how to use the control.
wxMSW: Fix wx.TreeCtrl to end label editing if the control loses
focus (a slightly modified patch 1084592.)
Added wx.EXEC_NODISABLE flag for wx.Execute, which will prevent all
the app's windows being disabled while a synchronous child process is
wxMSW: Much work to correct painting (or leaving transparent) of
control backgrounds, properly using background themes on XP, etc.
Fixed a circular reference problem with wx.Timer. It will now
completely cleanup after itself when the last reference to the timer
is removed. If you were previously using timer.Destroy() to cleanup
your timers it will no longer work. Instead you should hold a
reference to the timer and then del the reference when you are
finished with the timer.
Updated to 1.3.24 of SWIG. All of my big patches have been applied to
the main SWIG source tree, but unfortunatly there were also some bugs
added that affected the wxPython build and a few details in my
original patch were changed/removed, so we are still not free of
patches. A new patch for SWIG is located in the wxPython/SWIG
directory of the wxPython source tree. SWIG 1.3.24 plus this patch
should be used by anyone who is making custom modifications to
wxPython's .i files, or building their own extension modules or
etc. that need to interact with the wxPython swigged types. For the
morbidly curious, here are a few more details:
* Since it is now possible easily and simply share the SWIG type
tables across modules I reverted to always using the stock SWIG
runtime instead of my slightly hacked up version of it exported
via the wxPython C API.
* The %name directive is now deprecated so I replaced most uses of
it with a custom %Rename macro that uses %rename internally.
These will evetually need to be replaced with a DocDecl macro
when docstrings are added for those items.
* The "this" attribute of all SWIGged classes is no longer a
string containing a "swigified pointer", but rather a custom
built-in type that holds the real C pointer to the object and
the type info. It can be converted to a string like the old
value using str() or to the long integer value of the pointer
Added SetDefaultPyEncoding and GetDefaultPyEncoding functions which
will set/get the encoding used by wxPython to convert string or
unicode objects to/from wxString objects. Previously the default
Python encoding was always used, but unless the user had tweaked their
sitecustomize.py file it is always "ascii", which would result in
errors if the strings contained character codes >= 128.
SetDefaultPyEncoding will now allow you to control which encoding will
be used to do those conversions. The default encoding is set to the
value of `locale.getdefaultlocale()` when wxPython is first
imported. Please see http://www.alanwood.net/demos/charsetdiffs.html
for information on the differences between the common latin/roman
Added wxStdDialogButtonSizer, which is a a special sizer that knows
how to order and position standard buttons in order to conform to the
current platform's standards. You simply need to add each `wx.Button`
to the sizer, and be sure to create the buttons using the standard
ID's. Then call `Realize` and the sizer will take care of the rest.
wxMSW Toolbar: pass correct tool id (and not always -1) to the
wxGTK: Applied patch for combo box SELECTED events (no longer get
lots of surplus events)
wxGTK: Applied patch for proper menu highlight colour detection in
wxGTK: Commited scrollbar patch #1093339 which sends lineup, linedown
events based on intercepting the mouse down events.
wxGTK: Applied patch #1102789 which solved conflicts between wxWidgets
and GTK+'s context menu code.
wxGTK: Applied patch #1100327 for correct feedback from DND actions
(not all actions are allowed).
Fixed memory leak in wxGrid::UpdateAttr[Rows][Or][Cols] (patch 1104355)
For efficiency reasons, text controls no longer set the string for
each text updated event, but rather query for the string value only
when GetString is called from an event handler.
Added wx.SL_INVERSE style which will cause wx.Slider to invert the min
and max ends of the slider.
Several patches applied, such as #1111174, #1110252 and others, that
make the generic wx.TreeCtrl (used on wxGTK and wxMac) be more
conistent with the wxMSW native wx.TreeCtrl.
* Edit->Locate command (Ctrl-L) for quick selection of items.
Works with event-handling controls (buttons, text fields) but
not with labels/sizers.
* Some improvements: relative paths for files supplied as command-
line argument work correctly, notebook panels are highlighted
wxMac: Fixed a long-standing issue where wxSlider controls with a
hardcoded size would misplace their labels behind the slider control.
wx.HtmlListBox fixed so calling RefreshLine(s) will cause the data for
that line to be refetched from the overridden methods in the derived
The default DoGetBestSize now includes the difference (if any) between
the client size and total size of the window, (such as the size of
borders.) Code that sets the client size using the best size, or that
added extra space to sizers to compensate for this bug may need to be
Can suppress themed notebook pages with the wxNB_NOPAGETHEME style or
setting system option msw.notebook.themed-background to 0.
wxSyledTextCtrl updated to use Scintilla 1.62.
Can now set the msw.window.no-clip-children system option to 1 to
eliminate weird refresh behaviour (delays between a window being
erased and repainted, giving a ghostly gradual-redraw effect). May be
a temporary 'fix' until properly fixed before 2.6.
wxMac: Toolbar is now more native looking with borderless toolbar
wxMac: Switched wx.Bitmap to use newer Quartz object types and APIs
internally. This results in faster display and better alpha support.
wx.html.HtmlWindow now supports background images.
Added wx.lib.gestures module from Daniel Pozmanter which supports
using Mouse Gestures in an application.
wxGTK2: ENTER and LEAVE mouse events are now sent for multi-line text
wxMSW: "Alt" key (VK_MENU) now results in WXK_ALT keyboard event, not
Added modules from Peter Yared and Morgan Hua that implement the wx
Doc/View framework in pure Python code. See wx.lib.docview for the
base implementation and wx.lib.pydocview for Python-specific
extensions. There are also a couple sample applications located in
Added GetBitmap, GetIcon to wx.ImageList.
wxGTK wx.Button.SetLabel no longer invalidates/resets the font.
wx.Sizer.AddWindow, AddSizer, AddSpacer and etc. have now been
undeprecated at the request of Riaan Booysen, the Boa Constructor team
lead. Boa needs them to help keep track of what kind of item is being
managed by the sizer. They are now just simple compatibility aliases
for Add, and etc.
The old C++ version of the OGL lib is no longer built by default. Use
the Python version in the wx.lib.ogl package instead.
The wx.iewin module is no longer built by default. You can use the
wx.lib.iewin version instead.
Fixed wx.BufferedPaintDC for scrolled windows to work whether the
buffer is covering only the client area or the full virtual area of
the scrolled window. By default it will assume that only the client
area is covered. This is different than the old behavior so to
indicate that the entire virtual area is covered simply add a
wx.gizmos.TreeListCtrl: Add support for the EVT_TREE_ITEM_GETTOOLTIP
Added Resize, SetRGBRect, Size, and GetOrFindMaskColour methods to
- Corrected wx.ListBox selection handling
- Corrected default button size handling for different themes
- Corrected splitter sash size and look for different themes
- Fixed keyboard input for dead-keys
http://wxPython.org Java give you jitters? Relax with wxPython!