passage paramètre entre fenêtre graphique et qthread

a marqué ce sujet comme résolu.

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.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte