Signal and slot connection from a thread!?
-
Hi all,
I am programming a GUI using pyqt4. I created a thread with an infinite loop inside which there are some signals which would be emitted if certain conditions are fulfilled. I am trying to connect these signals with button handles in the main class. The idea if like this:
@
class WorkingThread(QtCore.QThread):def __init__(self): QtCore.QThread.__init__(self) def run(self): # here is a loop inside which the signals are transmitted while true { if a: self.emit(QtCore.SIGNAL("button_left(QString)")) elif b: self.emit(QtCore.SIGNAL("button_left(QString)")) }
class Mainclass(Qt.QWidget)
def init(self)
#other functions
self.workThread = WorkingThread()
self.connect( self.workThread, QtCore.SIGNAL("button_right(QString)"), self.handle_a2_right)
self.connect(self.workThread,QtCore.SIGNAL("button_left(QString)"), self.handle_a2_left)
self.workThread.start()def handle_a2_right
#functions heredef handle_a2_left
#functions here
@When the program reach the connection line in the main class it gives this error:
File "/usr/lib/python2.7/dist-packages/gnuradio/gr/top_block.py", line 151, in _coerce_endpoint
raise ValueError("unable to coerce endpoint")
ValueError: unable to coerce endpointAny suggestions would be appreciated!
Regards
[edit: added missing coding tags @ SGaist]
-
Hi and welcome to devnet,
You have two design issues here.
First: button_left(QString) and button_left(QString) are not members of WorkingThread.Second: emitting signals from the run function reimplementation doesn't behave like you might think it does. Please take a look at QThread's latest documentation to see how it should be done.
Hope it helps