[PyQt] Disposing of a QApplication

Sybren A. Stüvel sybren at stuvel.eu
Fri Mar 12 10:17:16 GMT 2010


Hi all,

I'm working on a PyQt GUI application using PyQt 4.6 and Python 2.6. According 
to the documentation:

	For any GUI application using Qt, there is precisely one QApplication object

This is true for our application, but not for our unit tests. They start and 
stop a QApplication in quick succession, so when the test stops it has to shut 
down and dispose of the application properly. The application instance is 
stored in 'self.app' of the unittest class, but just doing 'del self.app' 
doesn't destroy the application (probably because there are other references 
to it in the Qt modules).

Right now I start a separate thread that waits for a bit and then sends the 
application the quit() signal. Then I start the application's main loop, so 
that it is running when it receives the quit() signal from the other thread. 
Of course, this is not an ideal way.

I tried a single-threaded approach by first sending it the quit() signal and 
then run app.exec_() but that doesn't stop the application. Another approach I 
used was to try and replace the event loop with the following code, but that 
also doesn't stop the application.

        def aboutToQuit():
            self.fail("Quitting!")
        
        self.app.aboutToQuit.connect(aboutToQuit)

        # Send the quit event and let the application process it.
        start_time = time.time()
        while not self.app.closingDown():
            self.app.quit()
            self.app.processEvents()
            self.app.sendPostedEvents(self.app, 0)
            self.app.flush()
            
            time.sleep(0.01)
            
            # Wait three seconds for the app to stop.
            if time.time() - start_time > 3.0:
                self.fail("Failed to quit the application")
        
        del self.app
        self.fail("Done")

It's done in a unittest.TestCase class, and the self.fail() calls are there so 
that I can quickly see what's going on.

What would you recommend?

-- 
Sybren A. Stüvel

sybren at stuvel.eu
http://stuvel.eu/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100312/e9b2a229/attachment.pgp>


More information about the PyQt mailing list