Hello,

I'm using PyQt 4.1.1 compiled against Qt 4.2.2. on WinXP with Python
2.5. I have been having a strange issue that appears to be some sort of
deadlock when using QThreads.

Below is some sample code that reproduces the problem for me.


----- CODE -----
import PyQt4.Qt as qt

class CounterWidget(qt.QWidget):
    def __init__(self):
        qt.QWidget.__init__(self)
        self.count = 0
        
        self.layout = qt.QHBoxLayout(self)
        
        self.label = qt.QLabel()
        self.label.setText("COUNT: %d" % self.count)       
        
        self.layout.addWidget(self.label)
        
        self.thread = CounterThread()
        self.thread.connect(self, qt.SIGNAL('START'),
                            self.thread.work_loop)
        self.connect(self.thread, qt.SIGNAL('INCR_COUNT'),
                     self.incr_count, qt.Qt.QueuedConnection)
        self.connect(self.thread, qt.SIGNAL('finished()'),
                     self.thread, qt.SLOT('deleteLater()'))

        self.thread.start()
        
    def incr_count(self):
        self.count += 1
        self.label.setText("COUNT: %d" % self.count)
        
    def thread_start_work(self):
        self.emit(qt.SIGNAL('START'))
    
        
        
class CounterThread(qt.QThread):
    def __init__(self):
        qt.QThread.__init__(self)

    def run(self):
        qt.QTimer.singleShot(0, self.work_loop)
        self.exec_()
        
    def work_loop(self):
        for x in xrange(500):
            self.emit(qt.SIGNAL('INCR_COUNT'))
            self.msleep(1)
        
if __name__ == "__main__":
    app = qt.QApplication([])
    w = CounterWidget()
    w.show()
    app.connect(app, qt.SIGNAL('lastWindowClosed()'),
                app, qt.SLOT('quit()'))
    app.exec_()

----- END CODE -----

The code above will make a simple textlabel widget and attempt to update
an integer counter via signals. This code usually locks up around count
#430-450 for me. The GUI window freezes and the app has to be killed
forcefully.

Any idea why this is happening?


Hugh "Trey" Stout

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to