[Pythonmac-SIG] Opening a Cocoa window from a Python C extension
Bob Ippolito
bob at redivi.com
Tue Feb 10 08:22:25 EST 2004
On Feb 10, 2004, at 3:37 AM, Michiel Jan Laurens de Hoon wrote:
> I am porting PyGist (a scientific plotting package for Python, mainly
> written in C) to Mac OS X. PyGist was originally written for
> Linux/Unix machines and was recently ported to Windows. For the Mac OS
> X port, I am using Cocoa to create the graphics windows and calls to
> CoreGraphics for the actual drawing. The graphics work fine, but there
> is still a problem with Cocoa windows created from a Python C
> extension module.
>
> I create my window with
>
> window = [ [NSWindow alloc]
> initWithContentRect: rect
> styleMask: style
> backing: NSBackingStoreBuffered
> defer: NO];
>
> and try to show the window with
>
> [window orderFront: nil];
>
> The window is displayed and everything seems to be working fine;
> graphics are also drawn correctly. The window becomes the key window
> if I click in it, however the previous key window also stays key, so I
> end up with two key windows at the same time. In addition, cursor
> events are not handled correctly (which I need for zooming and reading
> out coordinate values).
>
> I wrote a little test program to find out what is happening. It turns
> out that the test program works correctly if it is located in a
> directory test.app/Contents/MacOS/test. However, if I move the "test"
> program to a different directory it shows the same problem as a window
> created in the Python C extension, even though the test.app directory
> is otherwise empty.
>
> The problem may therefore be that the window that I am trying to open
> should be somehow linked to the Terminal.app from which I am running
> Python in order for it to be recognized as a bona fide window. Does
> anybody know the right way to do this?
Applications in OS X *must* be run from a bundle. Run your script with
pythonw, build a bundle yourself (as you did), or use bundlebuilder.
See http://pythonmac.org/wiki/FAQ . It has absolutely nothing to do
with Terminal.app.
You may also want to consider using PyObjC instead of writing ObjC code.
-bob
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2357 bytes
Desc: not available
Url : http://mail.python.org/pipermail/pythonmac-sig/attachments/20040210/4cc6a344/smime.bin
More information about the Pythonmac-SIG
mailing list