Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Daten sicher zwischen dem Hauptfenster und einem Thread in PyQt kommunizieren?

Wie kann ich Daten sicher zwischen dem Hauptfenster und einem Thread in PyQt kommunizieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 12:50:15318Durchsuche

How can I safely communicate data between the main window and a thread in PyQt?

Kommunikation von Daten zwischen dem Hauptfenster und einem Thread in PyQt

In PyQt-Anwendungen besteht ein häufiges Szenario darin, Daten zwischen dem Hauptfenster und einem zu teilen Faden unter Beibehaltung der Fadensicherheit. Hier sind die empfohlenen Ansätze:

Signale und Slots:

  • Deklarieren Sie ein benutzerdefiniertes Qt-Signal in der Thread-Klasse, z. B. beep().
  • Verbinden Sie das Signal im Hauptfenster mit einem Slot, der das entsprechende Widget aktualisiert, z. B. update().

Beispiel:

<code class="python">class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self, sleep_time):
        super(Worker, self).__init__()
        self.sleep_time = sleep_time

    def run(self):
        i = 0
        while True:
            i += 1
            self.beep.emit(i)
            time.sleep(self.sleep_time)

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(1)  # Initial sleep time
        self.worker.beep.connect(self.update)
        self.worker.start()

    def update(self, number):
        # Update widget with number
        self.output.display(number)</code>

Vorbehalte:

  • Qt-Widgets sind nicht threadsicher und sollten nur vom Hauptthread aus aufgerufen werden.
  • Globale Variablen funktionieren beim Zugriff möglicherweise nicht wie erwartet aus mehreren Threads.

Andere Ansätze:

  • Übergabe der Hostfenster-Referenz: Riskant, da es auf der QObject-Thread-Affinität beruht und kann zu Rennbedingungen führen.
  • Synchronisierte Kopie beibehalten: Erfordert die Aufrechterhaltung der Konsistenz zwischen dem Hauptfenster und dem Thread, was komplex sein kann.

Das obige ist der detaillierte Inhalt vonWie kann ich Daten sicher zwischen dem Hauptfenster und einem Thread in PyQt kommunizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn