On Saturday 17 January 2004 4:43 pm, [EMAIL PROTECTED] wrote: > On Thu, 15 Jan 2004 19:15:06 +0000, > > Phil Thompson <[EMAIL PROTECTED]> wrote: > > On Thursday 15 January 2004 10:58 am, [EMAIL PROTECTED] wrote: > > > in my application I want to subclass qt.QApplication and use > > > this subclass instead of QApplication. Some of my modules are > > > automatically generated by pyuic and I am not allowed to > > > change their source code. The problem is these modules do > > > "from qt import *" and use an object called "qApp" which seems > > > to be an instance of qt.Application and I want them to use my > > > subclass (exactly its instance) instead of "qApp". How can I > > > solve this? > > > > What makes you think that qApp doesn't refer to the instance of > > your QApplication sub-class? > > I have this same issue. In specific answer to your question, > here's an excerpt from my program: > > class MyApp( QApplication ): > > def __init__( self, argv ): > QApplication.__init__( self, argv ) > > if __name__ == "__main__": > > app = MyApp( sys.argv ) > w = MyWidget( ) > app.setMainWidget( w ) > w.show( ) > print 'main:', app > print 'main:', qApp > app.exec_loop( ) > > and its output: > > main: <__main__.MyApp object at 0xf2690> > main: <__main__.qt.QApplication object at 0xf2330> > > qApp does *not* refer to the instance of my subclass.
Sorry, I wasn't clear. They refer to the same C++ instance. > > > I wondered to overwrite qApp with my instance, does this > > > work? Or will "qApp" be overwritten when a module does > > > "from qt import *"? > > > > You can overwrite it, but you have to make sure you do it in the > > right place. Something like... > > > > import sys > > import qt > > sys.modules['qt'].__dict__['qApp'] = your_instance > > Where is the right place to do this? Inside MyApp.__init__? > Inside main, after I create app? As early as possible, which would be in the __init__() method. Note, however, that any module that has already imported qt won't see it unless you also update that module's dictionary. > Is this still valid/safe in light of my example above? Yes. > > However, qApp should already refer to the same C++ instance that > > was created when your sub-class instance was created. The only > > issue you might have is if you need the Python type of qApp to > > be the that of your sub-class instead of QApplication - in which > > case you will have to overwrite it. > > That is exactly the case: that IWBNI the type of qApp were my > subclass rather than qApplication. Perhaps this is a design flaw, > but I decided to add some application-wide utility functions to my > application subclass, mostly thin wrappers around "emit( PYSIGNAL( > 'somesignal' ), *args )" sorts of utility functions. That way, I > can reference them from anywhere as qApp.utilityfunction. I think it's better to use a separate myApp global that you set in MyApp.__init__(). Otherwise you are just making your code more difficult to understand. Phil _______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
