migrieren vom geerbten QThread zum Worker-Modell
So durch eine Menge Hilfe in meinen vorherigen Fragen Unterbrechung des QThread-Ruhezustands undPySide übergibt Signale von QThread an einen Steckplatz in einem anderen QThread) Ich habe mich entschlossen zu versuchen, von dem geerbten @ zu wechselQThread
Modell zum Worker-Modell. Ich denke, ich sollte bei der @ bleibQThread
model wie ich das gemacht habe, und das andere modell geht nicht. Ich bin mir jedoch nicht sicher, warum das Worker-Modell bei mir nicht funktioniert.
Ich versuche dies zu tun. Bitte lassen Sie mich wissen, wenn etwas in meiner Methodik nicht stimmt.
Ich habe einQtGui.QWidget
das ist meine Haupt-GUI. Ich benutze einQPushButton
zu signalisieren Ich habe versucht, den Code auf das Wesentliche zu reduzieren, von dem ich glaube, dass es das Problem ist. Ich habe bestätigt, dassdatagramHandled
Signal
wird ausgegeben, aber daspacket_handled
Slot
scheint nicht angerufen zu werden.
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)