Partage de données entre la fenêtre principale et les threads dans PyQt
Question :
Lors de l'utilisation de PyQt , comment les données peuvent-elles être partagées efficacement entre la fenêtre principale et un thread ?
Réponse :
Le partage de données entre les threads nécessite une manipulation prudente, en particulier dans les applications GUI comme PyQt. Voici comment procéder :
Évitez les widgets partagés :
Les widgets ne doivent être accessibles que dans le fil de discussion principal. Tenter d'y accéder à partir d'autres threads entraînera un comportement indéfini.
Utiliser les signaux et les emplacements :
Établissez un canal de communication à l'aide du mécanisme de signaux et d'emplacements de Qt. Émettez des signaux à partir du thread pour informer la fenêtre principale des modifications de données. Connectez les emplacements dans la fenêtre principale pour gérer les signaux et mettez à jour en conséquence.
Exemple :
Considérez un scénario dans lequel un thread met continuellement à jour une valeur de spinbox dans la fenêtre principale :
<code class="python"># in main window self.worker = Worker(self.spinbox.value()) self.worker.beep.connect(self.update) self.spinbox.valueChanged.connect(self.worker.update_value) class Worker(QtCore.QThread): beep = QtCore.pyqtSignal(int) def __init__(self, sleep_time): super(Worker, self).__init__() self.running = False self.sleep_time = sleep_time def run(self): self.running = True i = 0 while self.running: i += 1 self.beep.emit(i) time.sleep(self.sleep_time) def stop(self): self.running = False def update_value(self, value): self.sleep_time = value</code>
Bonnes pratiques :
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!