Bonjour,
j'utilise un thread pour mettre à jour de la data sur un graphique pyqtgraph.
bon, le code ci dessous "tourne"... mais il y a parfois des warning qui s'affichent (par rapport à des courbes contenant des np.nan... et ce malgré l'utilisation de np.warnings.filterwarnings('ignore')).
Aussi, il y a parfois pas mal de lag (voire des non mises à jour de certains graph ou label de l'ihm).
je pense que le pyqtgraph implique, peut être, par lui même quelques thread qui ne font pas bon ménage avec le mien....
Du coup, je me pose des question sur la "meilleure" manière de gérer les emit()... avant ou sans paramètre? une fois dans la fonction connectée à l'emit, est-il bon de faire référence à des variables du thread comme c'est le cas ci-dessous?)
merci pour votre aide :-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) init_variables(self) instances_widget(self) #les 3 lignes ci-dessous sont contenues dans cet appel) instance_main.thread_simulation = update_datas_live_simulation(instance_main) instance_main.thread_simulation.finished.connect(instance_main.terminate_thread_simulation) instance_main.thread_simulation.signal_update_simulation.connect(instance_main.data_from_simulation) connect_specif_fonctions(self) construction_fenetre(self) def data_from_simulation(self): try: self.champ_texte_infos.setText(self.thread_simulation_passed.infos) self.graphique_price.setData(self.thread_simulation.x, self.thread_simulation.y_1) self.graphique_achat.setData(self.thread_simulation.x, self.thread_simulation.y_2) self.graphique_vente.setData(self.thread_simulation.x, self.thread_simulation.y_3) except Exception as e: print(e) def terminate_thread_simulation(self): print("Fin du thread") if __name__ == "__main__": appli = QApplication(sys.argv) fenetre_main = MainWindow() fenetre_main.show() sys.exit(appli.exec_()) class update_datas_live_simulation(QThread): signal_update_simulation = pyqtSignal() def __init__(self, ui): QThread.__init__(self) print("Init Thread") self.ui = ui self.init_variables() def run(self): print("Début Thread") #.... #.... x = x1 y_1 = y_1b y_2 = y_2b y_3 = y_3b self.signal_update_simulation.emit()
Partager