[R-SIG-Mac]Python <-> Objective C bidirectional bridge
Jan de Leeuw
deleeuw@stat.ucla.edu
Tue, 24 Dec 2002 09:31:33 -0800
See the message below. Although it is no substitute for
an R <-> Objective C bridge, it may make it
possible (using the existing RSPython bridge to do
Python from R) to do Cocoa from Python from R. Maybe I'll waste
part of the holidays trying this out.
--- Jan
========================================================================
=====================================================
PyObjC version 0.8 is now available for download.
See...
http://pyobjc.sourceforge.net/
... for more information.
The installer package includes a Project Builder project template for
easily creating new Cocoa-Python projects and a slew of examples.
Alternatively, the developer can choose to develop applications without
using Apple's developer tools. Full support for Interface Builder
documents is included.
The PyObjC Python module provides a feature complete bridge between the
Python programming language and Objective-C. With PyObjC, it is
possible to transparently message Objective-C objects from Python and
Python objects from Objective-C. Objective-C objects can be subclassed
from within Python. Support is also included for using the various
functions, enumerated types, and global variables found throughout the
Objective-C framework.
References to python dictionaries pass into Objective-C act like a well
behaved member of the NSDictionary class cluster. Likewise, Python List
references behave like a member of the NSArray class cluster.
Strings are transparently converted to the native type. NSArray and
NSDictionary references passed into Python behave like native Python
lists and dictionaries; including the ability to enumerate either using
the 'in' operator and to slice NSArray and NSMutableArray instances.
PyObjC fully supports creating full featured Cocoa applications written
in pure Python. There are aspects of PyObjC that are more powerful
than Cocoa in pure Obj-C (the ability to automatically define
classes/outlets based on the contents of a NIB file, for example).
PyObjC requires OS X 10.2 or greater. 10.1 support is possible and
will likely happen soon-- contact me if you need 10.1 support and are
willing to do a bit of grunt work to generate the appropriate files
(easy to do-- just need a 10.1 development machine).
The installer package is designed to work with the built-in Python
provided in OS X 10.2. Source is included on the disk image and the
pyobjc module works with Python 2.2 or greater as installed directly
from the Python Source, with the MacPython packages, and with the Fink
build of python.
PyObjC also provides an awesome environment for exploring frameworks.
The following transcript was copied out of a Terminal window-- it is an
example of working directly with the Objective-C runtime from Python
within the terminal.
>>> from objc import *
>>> from Foundation import *
>>> b =
NSBundle.bundleWithPath_("/System/Library/PrivateFrameworks/
PBXCore.framework")
>>> b.principalClass()
<objective-c class PBXProducerTarget at 0xa9030034>
>>> NSBundle.searchPathsForSupportFilesWithSubpath_("FooBar")
(
"/Volumes/Data/Users/bbum/Developer/ProjectBuilder Extras/FooBar",
"/Network/Developer/ProjectBuilder Extras/FooBar",
"/Developer/ProjectBuilder Extras/FooBar"
)
>>> PBXProject = lookUpClass("PBXProject")
>>> p =
PBXProject.projectWithFile_("/Developer/Examples/AppKit/TextEdit/
TextEdit.pbproj")
>>> p.targets()
(<PBXApplicationTarget:0x00a76830:6FE2093EFE93D5F211CA2CEA:name='TextEdi
t'>)
>>> p.buildStyles()
(
<PBXBuildStyle:0x00a77d30:011ADBA3FF9FD52E11CA0C5D:name='Development':bu
ildSettings.count=2>,
<PBXBuildStyle:0x00a82180:011ADBA4FF9FD52E11CA0C5D:name='Deployment':bui
ldSettings.count=1>
)
The version # of 0.8 indicates that documentation is lacking, unit
tests are incomplete and there may be a bug or two lurking within. In
practice, the module has proven to be very stable and to allow for the
development of extremely complex Cocoa projects in pure Python or a mix
of Python and Objective-C.
===
Jan de Leeuw; Professor and Chair, UCLA Department of Statistics;
Editor: Journal of Multivariate Analysis, Journal of Statistical
Software
US mail: 9432 Boelter Hall, Box 951554, Los Angeles, CA 90095-1554
phone (310)-825-9550; fax (310)-206-5658; email: deleeuw@stat.ucla.edu
homepage: http://gifi.stat.ucla.edu
------------------------------------------------------------------------
-------------------------
No matter where you go, there you are. --- Buckaroo Banzai
http://gifi.stat.ucla.edu/sounds/nomatter.au
------------------------------------------------------------------------
-------------------------