Partage de données entre la fenêtre principale et le thread dans PyQt
Les applications multithread doivent souvent partager des données entre le thread de la fenêtre principale et les threads de travail. Pour garantir la sécurité des threads et une bonne communication, PyQt propose plusieurs approches pratiques.
Option 1 : Référence directe à la fenêtre principale
Dans cette approche, une référence à la fenêtre principale la fenêtre est transmise au thread. Le thread peut alors accéder directement aux données dans la fenêtre principale, comme la valeur d'une spinbox.
<code class="python">class MainWindow(QtGui.QWidget): def __init__(self): # ... self.worker = Worker(self) # ... class Worker(QtCore.QThread): def __init__(self, host_window): super(Worker, self).__init__() self.host = host_window # ...</code>
Option 2 : Signaux et Slots
PyQt utilise signaux et emplacements pour communiquer entre les objets. Dans cette approche, le thread de travail émet des signaux lorsque les données changent, et les fonctions de la fenêtre principale gèrent les mises à jour.
<code class="python">class MainWindow(QtGui.QWidget): def __init__(self): # ... self.worker = Worker() self.worker.beep.connect(self.update) # ... class Worker(QtCore.QThread): beep = QtCore.pyqtSignal(int) def __init__(self): super(Worker, self).__init__() # ...</code>
Quelle option utiliser ?
Le le choix dépend des besoins du fil de discussion et du niveau de contrôle requis.
Considérations sur la sécurité des threads
Les widgets sont pas thread-safe. Par conséquent, il est crucial d’utiliser des signaux et des slots pour gérer la communication entre le thread et la fenêtre principale. La manipulation directe de widgets à partir de plusieurs threads peut entraîner un comportement inattendu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!