Hallo,
ich hab ein Python Skript erstellt das ich über eine mittels PyQt
erstellte GUI steuern lasse. Hierzu unterscheide ich zwischen einem
Worker Thread und einem GUI Thread. Die GUI ist relativ simpel und
beinhaltet zwei Buttons und ein paar LCD Anzeigen, wobei Parameter im
Worker Thread für die Werte zuständig sind welche die QLCDNumbers
anzeigen sollen.
Meine GUI verbindet das ganze wie folgt:
1 | class BtDialog(QtGui.QDialog, Dlg):
|
2 | def __init__(self):
|
3 | QtGui.QDialog.__init__(self)
|
4 | self.setupUi(self)
|
5 | self.thread = WorkerThread()
|
6 |
|
7 | #Configure slots
|
8 | self.connect(self.startButton, QtCore.SIGNAL("clicked()"), self.onStart)
|
9 | self.connect(self.stopButton, QtCore.SIGNAL("clicked()"), self.onStop)
|
10 |
|
11 | #QLCDNumber Slot
|
12 | self.connect(self.thread, self.thread.voltage, self.lcdVoltage.display)
|
13 |
|
14 | def onStart(self):
|
15 | self.thread.start()
|
16 |
|
17 | def onStop(self):
|
18 | self.emit(self.thread.voltage, 0) #Trying to refresh
|
19 | abort()
|
Hier verbinde ich die Slots zu den Signalen, ein Start-Button um den
Worker Thread zu starten, ein Stop-Button zum beenden und bspw. eine
LCD-Anzeige für die gelesene Spannung. Das funktioniert soweit auch, nur
wenn ich jetzt z.B. auf Stop drücke um den Ablauf abzubrechen möchte ich
auch, dass auf der Anzeige wieder 0 steht, das funktioniert mit diesem
emit-Befehl nicht. Mein Worker Thread initialisiert das Signal wie
folgt:
1 | def __init__(self, parent = None):
|
2 | QtCore.QThread.__init__(self, parent)
|
3 | self.voltage = QtCore.SIGNAL("voltage")
|
Und während des Prozessdurchlaufs emitiere ich das Signal wie folgt:
1 | self.emit(self.voltage, volt_act)
|
Das funktioniert soweit auch, nur wenn der Thread soweit durchgelaufen
ist bzw. der Prozess gestoppt wird friert die Anzeige auch ein und
sendet bei einem Neustart keine neuen Daten. Die Anzeige bleibt
eingefroren. Hat jemand eine Idee wie ich die Anzeige refreshen kann?