habe ein Problem mit einem QThread mit welchem ich je Sekunde eine Variable zwischen true und false toggle. Abhägig von dem Zustand soll in meiner Gui zwischen zwei pxmap umgeschaltet werden. Das Togglesignal funktioniert auch soweit (sehe ich in meinem shell) Der Umschalten der Pxmap ist allerding weit von einem Sekundentakt entfernt.
Vielleicht könnt Ihr mir helfen wo ich da meinen Fehler mache.
Die Klasse Lebenszeichen ist mein Thread welcher das Signal BlinktaktOn sendet - im der Klasse MainView soll im def LebenzeichenDone das Signal ausgewertet werden.
danke schon mal im voraus
michpro
Code: Alles auswählen
[Codebox=python file=Unbenannt.py]#Import für Qt
import sys
from PyQt4 import QtGui, QtCore, uic
from PyQt4.QtCore import QThread
#Import für Python
import datetime, time, threading
import configparser
#Import für Raspberry
import RPi.GPIO as GPIO
IMAGE1 = ("/ablage/nfs/pi/LedOn.png")
IMAGE2 = ("/ablage/nfs/pi/LedOff.png")
#Klasse MainView anlegen
class MainView(QtGui.QMainWindow):
def __init__(self, lebenszeichen):
super(MainView, self).__init__()
uic.loadUi("/ablage/nfs/pi/MainView.ui", self)
self.pxTaktOn = QtGui.QPixmap(IMAGE1)
self.pxTaktOff = QtGui.QPixmap(IMAGE2)
#Variable initalisiern
self.bwert = False
#GPIO Zuweisung: Pin 11 --> GPIO17 / Pin 12 --> GPIO18
GPIO.setmode(GPIO.BOARD)
#GPIO.setup(13, GPIO.OUT)
#Ablauftimer definieren um alle 10 Sekunden Isttemperatur zu prüfen
self.timer=QtCore.QTimer()
self.timer.start(10000)
#Update Isttemperatur
self.constantUpdate()
#Thread für Lebenszeichen starten
self.Blinken = Lebenszeichen()
self.Blinken.start()
#Initalisieren Signal / Slots
self.timer.timeout.connect(self.constantUpdate)
self.pB_TestEinAus.clicked.connect(self.TestEinAus)
self.connect(self.Blinken, QtCore.SIGNAL("Zustand"), self.LebenzeichenDone)
#MainView anzeigen
self.show()
#Update Isttemperatur
def constantUpdate(self):
# Feld für Temperaturwerte anlgen / Laufvariable anlegen und initalisieren
fTemperatur = []
# 1-Wire Slave-Liste lesen
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = file.readlines()
file.close()
# Fuer jeden 1-Wire Slave aktuelle Temperatur ausgeben
for line in w1_slaves:
# 1-wire Slave extrahieren
w1_slave = line.split("\n")[0]
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen, konvertieren und in Array speichern
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
fTemperatur.append(temperature)
# Temperatur ausgeben
#Rueckgabe Temperaturwete
self.lb_aktTempWr1Value.setText(str(fTemperatur[0]))
self.lb_aktTempWr2Value.setText(str(fTemperatur[1]))
#clicked
def TestEinAus(self):
if self.bwert == True:
self.lb_EinAus.setText("EIN")
self.bwert = False
#GPIO.output(13, GPIO.HIGH)
elif self.bwert ==False:
self.lb_EinAus.setText("AUS")
self.bwert = True
#GPIO.output(13, GPIO.LOW)
#Lebenszeichen aus Thread empfangen
def LebenzeichenDone(self, Takt):
if Takt == True:
print("true")
self.px_Lebenszeichen.setPixmap(self.pxTaktOn)
if Takt == False:
print("false")
self.px_Lebenszeichen.setPixmap(self.pxTaktOff)
class Lebenszeichen(QThread):
def __init__(self, parent=None):
super(Lebenszeichen, self).__init__(parent)
def run(self):
while True:
BlinktaktOn = True
self.emit(QtCore.SIGNAL("Zustand"), BlinktaktOn)
time.sleep(1)
BlinktaktOn = False
self.emit(QtCore.SIGNAL("Zustand"), BlinktaktOn)
time.sleep(1)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
lebenszeichen = Lebenszeichen()
window = MainView(lebenszeichen)
sys.exit(app.exec_())[/Codebox]