Forum: PC-Programmierung Python/PyQt: Refresh von QLCDNumbers


von VH (Gast)


Lesenswert?

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?

von Rolf M. (rmagnus)


Lesenswert?

Ich kenne mich jetzt mit PyQt nicht aus, aber für mich sieht das so aus, 
als ob du versuchst, ein Signal zu senden, das eigentlich zu einem ganz 
anderen Objekt gehört als der Sender.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.