PyQt 中主窗口和線程之間的數據共享
問題:
使用PyQt 時,如何在主視窗和執行緒之間有效地共享資料?
答案:
在執行緒之間共享資料需要謹慎處理,特別是在像 PyQt 這樣的 GUI 應用程式中。操作方法如下:
避免共享小部件:
小部件只能在主執行緒中存取。嘗試從其他執行緒存取它們將導致未定義的行為。
利用訊號和槽:
使用 Qt 的訊號和槽機制建立通訊通道。從執行緒發出信號以通知主視窗資料變更。連接主視窗中的插槽以處理訊號並進行相應更新。
範例:
考慮一個執行緒不斷更新主視窗中的旋轉框值的場景:
<code class="python"># in main window self.worker = Worker(self.spinbox.value()) self.worker.beep.connect(self.update) self.spinbox.valueChanged.connect(self.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): self.running = True i = 0 while self.running: i += 1 self.beep.emit(i) time.sleep(self.sleep_time) def stop(self): self.running = False def update_value(self, value): self.sleep_time = value</code>
最佳實踐:
以上是如何在 PyQt 主視窗和單獨執行緒之間共享資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!