Maison  >  Article  >  développement back-end  >  Comment partager des données entre la fenêtre principale et les threads dans PyQt : référence directe par rapport aux signaux et aux emplacements ?

Comment partager des données entre la fenêtre principale et les threads dans PyQt : référence directe par rapport aux signaux et aux emplacements ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 00:40:30874parcourir

How to Share Data Between the Main Window and Threads in PyQt: Direct Reference vs. Signals and Slots?

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.

  • L'option 1 offre un accès direct aux données de la fenêtre principale, mais peut ne pas être aussi évolutive pour un partage de données plus complexe.
  • Option 2 garantit la sécurité des threads et prend en charge des modèles de communication plus flexibles.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn