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
Libérer: 2024-10-27 00:40:30
original
952 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal