PyQt app in seperate thread

anders anderslanglands at gmail.com
Wed Nov 22 09:06:44 EST 2006


Phil Thompson wrote:
> On Wednesday 22 November 2006 12:37 pm, anders wrote:
> > I am writing a plugin for a piece of software in python, and I want to
> > start up a PyQt GUI in the plugin, without stalling the main thread
> > while the gui is running (later i will want to pass messages between
> > the main thread and the gui thread).
> >
> > I'm new to pyqt, so I'm probably doing something very silly, but for
> > the moment I'm just trying to get the first pyqt tutorial example
> > running in a seperate thread:
> >
> > ----8<--------
> >
> > import sys
> > from PyQt4 import QtGui
> > from PyQt4 import QtCore
> >
> > class MyThread( QtCore.QThread ):
> > 	def __init__( self ):
> > 		QtCore.QThread.__init__( self )
> >
> > 	def run( self ):
> > 		app = QtGui.QApplication( sys.argv )
> > 		hello = QtGui.QPushButton( 'Hello world!' )
> > 		hello.resize( 500, 500 )
> > 		hello.show()
> > 		app.exec_()
> > 		QtCore.QThread.terminate(  )
> >
> >
> >
> > mt = MyThread()
> > mt.start()
> > print 'Main thread continuing...'
> > mt.wait()
> > print 'GUI thread finished.'
> >
> > ----8<--------
> >
> > The app starts up (with a warning WARNING: QApplication was not created
> > in the main() thread. ). I get a window, but no button, and clicking on
> > the close button does nothing and I have to force the program to quit.
> >
> > There's got to be a way to get this working, right? Can anyone help me
> > along the right path?
>
> Read http://doc.trolltech.com/4.2/threads.html
>
> In particular the bit that says that exec_() must be called from the main
> thread and not from a QThread.
>
> Phil


OK so that's all good... so how do I go about doing what I want then?
Can I set up a window in the second thread and start its event loop
without running the event loop in the core app?




More information about the Python-list mailing list