Maison >développement back-end >Tutoriel Python >Comment partager des données en toute sécurité entre la fenêtre principale et les threads de PyQt ?
Dans PyQt, partage de données entre la fenêtre principale et les threads
Lors de la création d'applications GUI avec PyQt, il peut y avoir des cas où vous devez partager données entre la fenêtre principale et un thread. Pour y parvenir, il est important de se rappeler que les widgets ne sont pas thread-safe. Seul le thread principal peut interagir directement avec les widgets.
Pratiques incorrectes
Bonne pratique : signaux et emplacements
L'approche recommandée pour le partage de données consiste à utiliser le mécanisme d'emplacement de signal de Qt. Des signaux sont émis par des objets pour avertir d'autres objets d'un événement spécifique. Les slots sont des fonctions qui reçoivent ces signaux et sont exécutées dans le thread principal.
Exemple : Contrôler le temps de veille à partir d'une Spinbox
Considérons un exemple où un thread effectue une tâche répétitive. tâche et doit ajuster son temps de veille en fonction d'une valeur de spinbox contrôlée par l'utilisateur dans la fenêtre principale.
<code class="python"># In the main window: # Create worker thread worker = Worker(spinbox.value()) # Connect the worker's beep signal to an update slot worker.beep.connect(self.update) # Connect the spinbox valueChanged signal to worker's update_value slot spinbox.valueChanged.connect(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): # Thread execution logic here... def update_value(self, value): self.sleep_time = value</code>
Dans cet exemple, l'emplacement update_value du fil met à jour son attribut sleep_time chaque fois que la valeur de spinbox de la fenêtre principale change. Cela permet au thread d'ajuster dynamiquement son temps de veille en fonction des entrées de l'utilisateur. Le sleep_time mis à jour est ensuite utilisé dans la méthode d'exécution du thread pour contrôler la durée de veille entre chaque répétition de tâche.
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!