migrando do modelo Inherited QThread para Worker
Então, com muita ajuda nas minhas perguntas anteriores (Interrompendo o sono QThread ePySide passando sinais do QThread para um slot em outro QThread) Decidi tentar mudar do herdadoQThread
modelo para o modelo de trabalhador. Eu estou pensando que eu deveria ficar com oQThread
modelo como eu tinha esse trabalho, e o outro modelo não é. No entanto, não sei por que o modelo Worker não está funcionando para mim.
Estou tentando fazer isso, por favor, deixe-me saber se há algo inerentemente errado na minha metodologia?
eu tenho umQtGui.QWidget
essa é minha principal interface gráfica. Estou usando umQPushButton
para sinalizar, tentei reduzir o código ao básico de onde acredito que esteja o problema. Eu verifiquei quedatagramHandled
Signal
é emitido, mas opacket_handled
Slot
parece não ser chamado.
class myObject(QtCore.QObject):
def __init__(self):
super(myObject, self).__init__()
self.ready=False
@QtCore.Slot()
def do_work(self):
#send a packet
self.ready=False
while not self.ready:
time.sleep(0.01)
@QtCore.Slot(int)
def packet_handled(self, errorCode):
print "Packet received."
self.ready = True
class myWidget(QtGui.QWidget):
datagramHandled = QtCore.Signal(int)
startRunThread = QtCore.Signal()
def __init__(self,parent=None, **kwargs):
super(myWidget, self).__init__(parent=parent)
# Bunch of GUI setup stuff (working)
self.myRunThread = QtCore.QThread()
@QtCore.Slot()
def run_command(self):
self.myRunObj = myObject()
self.myRunObj.moveToThread(self.myRunThread)
self.datagramHandled.connect(self.myRunObj.packet_handled)
self.startRunThread.connect(self.myRunObj.do_work)
self.myRunThread.start()
self.startRunThread.emit()
@QtCore.Slot()
def handle_datagram(self):
#handle the incoming datagram
errorCode = 0
self.datagramHandled.emit(errorCode)