"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-06
Parcourir:568

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 communication appropriée, 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 de la fenêtre principale, comme la valeur d'une spinbox.

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
        # ...

Option 2 : Signaux et slots

PyQt utilise des signaux et des slots pour communiquer entre les objets. Dans cette approche, le thread de travail émet des signaux lorsque les données changent, et les fonctions d'emplacement de la fenêtre principale gèrent les mises à jour.

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__()
        # ...

Quelle option utiliser ?

Le choix dépend des besoins du thread et du niveau de contrôle requis.

  • 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 une communication plus flexible modèles.

Considérations sur la sécurité des threads

Les widgets ne 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3