emdding python gui in c code - OS independent

Diez B. Roggisch deets at web.de
Mon Oct 11 20:43:48 CEST 2010

tinauser <tinauser at libero.it> writes:

> On Oct 11, 6:49 pm, Chris Rebert <c... at rebertia.com> wrote:
>> On Mon, Oct 11, 2010 at 6:16 AM, tinauser <tinau... at libero.it> wrote:
>> > hi there,
>> > i need to embed python GUI in a c++ code. I've seen that,while on
>> > windows running GUI is no problem, in mac i need to use pythonw
>> > instead python.
>> > the question is,how should i tell the program that if the OS is mac,
>> > it should pythonw, otherwise python is fine?
>> I think you have it backwards. MS Windows is where one typically needs
>> to use pythonw to suppress a console window from opening when Python
>> is run. *nixes (including Mac OS X) have no such problem and (I'm
>> pretty sure) only have a pythonw executable for compatibility
>> purposes. Just specify pythonw regardless of OS and you should be
>> fine.

This is not entirely true, there is a difference on the mac, see below.
>> Cheers,
>> Chris
>> --http://blog.rebertia.com
> thanks:
> how do i specify pythonw programmatically?
> i tried Py_SetProgramName("pythonw");
> it doesn't raise errors, but does not solve the problem on mac, i.e. i
> get the error:
> This program needs access to the screen.
> Please run with 'pythonw', not 'python', and only when you are logged
> in on the main display of your Mac.

I'm not sure that's your problem. It is not about the *name* of the
program. It is about Python being a Framework build. Which the ones that
come with OSX are, and if you link against them that's enough.

However, you are writing your *own* binary program, and I guess that's
the problem. I don't know without further research why there is a
difference between commandline and GUI-programs in OSX (I guess it has
to do with the event loop or something), but I think your umbrella
program is the real culprit here. If it's not a proper GUI program
(whatever that exactly means), delegating rendering of a GUI to Python
will trigger that code that spits out your above error message.


More information about the Python-list mailing list