[PyKDE] qApp is a QApplication instance

Phil Thompson phil at riverbankcomputing.co.uk
Mon Mar 21 16:38:07 GMT 2005


> Phil Thompson <phil at riverbankcomputing.co.uk> wrote:
>
>>>>>> sys.modules['qt'].__dict__['qApp'] = A(sys.argv)
>>>>>>
>>>>>> ...might do it. You have to make sure that this is done before the
>>>>>> other
>>>>>> modules that want to use it get imported.
>
>>> Well, I'm trying, but it's almost impossible to do it. By the time the
> App
>>> constructor has executed, many modules are imported already. Even
>>> putting
>>> the sys.modules line at the top of A's constructor is not enough
>>> because
>>> of
>>> the fact that many modules are already imported. I even tried reload
>>> the
>>> modules but that caused other problems.
>>>
>>> I understand that you consider this not stricly a bug. But there *is* a
>>> need
>>> to access the application from everywhere without passing it around,
>>> and
>>> qApp exists exactly for that. In C++, you can downcast it to whatever
>>> app
>>> type you defined and use it. This is impossible with PyQt.
>>
>> No it isn't - sip.cast()
>
> What would the correct syntax would be, then?
>
> def pyApp():
>     import sip
>     return sip.cast(qApp, App)
>
> gives me a:
>
> SystemError: error return without exception set

That's the correct syntax. I assume that you have called the App ctor by
the time you call pyApp(). If so, can you put together a small, complete
example?

Phil




More information about the PyQt mailing list