In PyQt Daten zwischen Hauptfenster und Threads teilen
Beim Erstellen von GUI-Anwendungen mit PyQt kann es Fälle geben, in denen Sie Daten teilen müssen Daten zwischen dem Hauptfenster und einem Thread. Um dies zu erreichen, ist es wichtig zu bedenken, dass Widgets nicht threadsicher sind. Nur der Hauptthread kann direkt mit Widgets interagieren.
Falsche Praktiken
Best Practice: Signale und Slots
Der empfohlene Ansatz für den Datenaustausch ist die Verwendung des Signal-Slot-Mechanismus von Qt. Signale werden von Objekten ausgesendet, um andere Objekte über ein bestimmtes Ereignis zu informieren. Slots sind Funktionen, die diese Signale empfangen und im Hauptthread ausgeführt werden.
Beispiel: Steuern der Ruhezeit von einer Spinbox aus
Betrachten Sie ein Beispiel, in dem ein Thread eine Wiederholung ausführt Aufgabe und muss seine Ruhezeit basierend auf einem benutzergesteuerten Spinbox-Wert im Hauptfenster anpassen.
<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>
In diesem Beispiel aktualisiert der update_value-Slot des Threads sein Sleep_time-Attribut immer dann, wenn sich der Spinbox-Wert des Hauptfensters ändert. Dadurch kann der Thread seine Ruhezeit basierend auf Benutzereingaben dynamisch anpassen. Die aktualisierte „sleep_time“ wird dann in der Ausführungsmethode des Threads verwendet, um zu steuern, wie lange er zwischen den einzelnen Aufgabenwiederholungen schläft.
Das obige ist der detaillierte Inhalt vonWie können Sie Daten sicher zwischen dem Hauptfenster und den Threads von PyQt austauschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!