Bonjour à tous.
Je découvre la programmation Python sous RPI. Je suis actuellement en train de faire une interface graphique pour un radio-telescope.
Je bloque sur le passage d’un paramètre entre la fenêtre graphique et le QThread
Le code de la class du QThread:
#class sequence acquisition
class Acquisition(QThread):
update_Acqui = pyqtSignal(int,int,int,int) # liaison signal entre la fenetre et le thread
def __init__(self, Nb, parent=None):
boucle(Acquisition, self).__init_(parent)
self.Nb = Nb
def run(self):
affichageThreadId("ADC2")
GPIO.output(38, 1) # Activer GPIO HT Bdf
time.sleep(50/1000) # tempo 0.05s
GPIO.output(35, 1) # Activier GPIO Mesure
a == 0
Bdf == 0
while a!= Nb:
Bdf = Bdf + adc2.read_adc(0, gain=GAIN) #remplacer par le bon ADC
a += 1
BdfMoy = Bdf/Nb
GPIO.output(38, 0) # Des Activer GPIO HT Bdf
time.sleep(50/1000) # tempo 0.05s
GPIO.output(38, 0) # des Activier GPIO Mesure
GPIO.output(40, 1) # Activer GPIO HT Mesure
time.sleep(50/1000) # tempo 0.05s
GPIO.output(35, 1) # Activier GPIO Mesure
a == 0
Mes == 0
while a!= Nb:
Mes = MES + adc2.read_adc(0, gain=GAIN) #remplacer par le bon ADC
a += 1
MesMoy = Mes/Nb
MesNet = MesMoy - BdfMoy
GPIO.output(40, 0) # Des Activer GPIO HT Mesure
time.sleep(500/1000) # tempo 0.05s
GPIO.output(35, 0) # des Activier GPIO Mesure
self.update_Acqui.emit(Bdf,BdfMoy,MesMoy,MesNet)
La class de definition de ma fenêtre graphique avec un import d’un fichier provenant de QtDesigner
from RT_RPI import*
class myApp(QWidget, Ui_Form): # la classe reçoit le Qwidget principal ET la classe définie dans test.py obtenu avec pyuic5
def __init__(self, parent=None):
QWidget.__init__(self) # initialise le Qwidget principal
self.setupUi(parent) # Obligatoire
#-- variables utiles --
#Réalisez les connexions supplémentaires entre signaux et slots
self.TestPush.clicked.connect(self.TestPushClicked) # push button test
self.TestPush_2.clicked.connect(self.TestV1) # push button test V1
self.TestPush_3.clicked.connect(self.TestV2) # push button test V2
self.MesPush.clicked.connect(self.MesPushClicked) # push button mesure
self.TestPush_4.clicked.connect(self.Top) # push button Stop
self.InterMesSlider.valueChanged.connect(self.Interval) # Slider intervalle de mesure
self.TpsAcqSlider.valueChanged.connect(self.Interval) # Slider tps total d'acquisition
self.Fermer.clicked.connect(self.Quitter)
self.Tension=QTimer() # timer pour mise a jour des tensions de la carte. Sequence dans un thread
self.Tension.timeout.connect(self.ADCTension)
self.Tension.start(5000)
Et ci dessous le code qui appelle le QTHREAD.
def MesPushClicked(self): # fonction lors appui bouton Mes
#duree = self.InterMesLCD.value() + 5 # lancement de l'acquisition (intervale entre 2 mesure +5s d'acquisition
#self.Acq.start(duree)
Nb = self.NbPtMesLCD.value()
print(Nb)
self.Acq = Acquisition(Nb) # definition et lancement du thread d'acquisition
self.Acq.start()
self.Acq.update_Acqui.connect(self.update_progress) # Connection signal entre la fenetre et le thread
def update_progress(self, val1, val2, val3, val4): # fonction de recuperation des valeurs du thread et mise a jour de la fenetre
print(val1)
print(val2)
print(val3)
print(val4)
Je voudrais que le QThread recoive la valeur Nb pour effectuer la boucle d’acquisition des données dans le QThread.
J’ai tester l’acquisition des valeur de l’adc abtenu dans le QThread vers la fenetre graphique, tout fonctionne mais le passage de Nb vers le QThread ne fonctionne pas.
Qui pourrais m’aider et me donner un exemple?
Merci d’avance.
+0
-0