Hi,

I have a problem with passing signals a cross threads.
I was under the impression that when using Qt.QueuedConnection the slot
would always be executed in the thread that the receiver object lived.  But
when I created this test application I does not seem to be doing that. Any
suggestions on what the error might be?

Btw, I'm working on a tutorial on using signal and slots with python over at
http://developernew.kde.org/Development/Tutorials/101_Python_introduction_to_signal_and_slots
Feel free to improve it. Feedback and suggestions are also most welcome.
English is not my native language so I guess there are plenty of mistakes :/

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

class MyUI(QMainWindow):
   def __init__(self):
       QMainWindow.__init__(self)
       self.list=QListWidget()
       self.setCentralWidget(self.list)

   def newItem(self,item):
       self.list.addItem(item)


class MyWorkerThread(QThread):
   def __init__(self,ui):
       QThread.__init__(self)
       self.ui=ui

   def run(self):
       self.connect(self,SIGNAL("createdItem"),self.ui.newItem,
Qt.QueuedConnection)
       for i in range (1,10):
           #creating items
           self.emit(SIGNAL("createdItem"),i)
       self.exec_()

if __name__=="__main__":
   app=QApplication(sys.argv)
   window=MyUI()
   window.show()
   worker=MyWorkerThread(window)
   worker.start()
   app.exec_()


This code outputs:
QObject: Cannot create children for a parent that is in a different thread.
_______________________________________________
PyKDE mailing list    [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to