pyqt4 emiting signals in threads to slots in main thread
17,010
You actually connect the wrong signal to the slot. Some modification make it run as expected
import sys, time
from PyQt4 import QtGui as qt
from PyQt4 import QtCore as qtcore
app = qt.QApplication(sys.argv)
class widget(qt.QWidget):
def __init__(self, parent=None):
qt.QWidget.__init__(self)
def appinit(self):
thread = worker()
self.connect(thread, thread.signal, self.testfunc)
thread.start()
def testfunc(self, sigstr):
print sigstr
class worker(qtcore.QThread):
def __init__(self):
qtcore.QThread.__init__(self, parent=app)
self.signal = qtcore.SIGNAL("signal")
def run(self):
time.sleep(5)
print "in thread"
self.emit(self.signal, "hi from thread")
def main():
w = widget()
w.show()
qtcore.QTimer.singleShot(0, w.appinit)
sys.exit(app.exec_())
main()
Author by
user393899
Updated on June 15, 2022Comments
-
user393899 about 2 years
I have some custom signals in my main thread that I would like to emit in my other threads but I'm not sure how to connect them. Could someone post an example?
ex:
import sys, time from PyQt4 import QtGui as qt from PyQt4 import QtCore as qtcore app = qt.QApplication(sys.argv) class widget(qt.QWidget): signal = qtcore.pyqtSignal(str) def __init__(self, parent=None): qt.QWidget.__init__(self) self.signal.connect(self.testfunc) def appinit(self): thread = worker() thread.start() def testfunc(self, sigstr): print sigstr class worker(qtcore.QThread): def __init__(self): qtcore.QThread.__init__(self, parent=app) def run(self): time.sleep(5) print "in thread" self.emit(qtcore.SIGNAL("signal"),"hi from thread") def main(): w = widget() w.show() qtcore.QTimer.singleShot(0, w.appinit) sys.exit(app.exec_()) main()
signal never raised.