如何在 PyQt 中的主視窗和執行緒之間共享資料:直接引用與訊號和插槽?

Linda Hamilton
發布: 2024-10-27 00:40:30
原創
868 人瀏覽過

How to Share Data Between the Main Window and Threads in PyQt: Direct Reference vs. Signals and Slots?

PyQt 中主視窗和執行緒之間共享資料

多執行緒應用程式經常需要在主視窗執行緒與工作執行緒之間共用數據。為了確保線程安全和正確的通信,PyQt 提供了幾種實用的方法。

選項 1:直接引用主視窗

在此方法中,對主視窗的引用視窗傳遞給執行緒。然後線程可以直接存取主視窗中的數據,例如旋轉框的值。

<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>
登入後複製

選項 2:訊號和槽

PyQt 使用訊號和槽用於物件之間的通訊。在這種方法中,工作執行緒在資料變更時發出訊號,主視窗槽函數處理更新。

<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>
登入後複製

使用哪個選項?

選擇取決於執行緒的需求和所需的控制層級。

  • 選項 1 提供對主視窗資料的直接訪問,但可能無法擴展以實現更複雜的資料共用。
  • 選項 2 確保執行緒安全並支援更靈活的通訊模式。

線程安全注意事項

小部件是不是線程安全的。因此,使用訊號和插槽來處理線程和主視窗之間的通訊至關重要。從多個執行緒直接操作小部件可能會導致意外行為。

以上是如何在 PyQt 中的主視窗和執行緒之間共享資料:直接引用與訊號和插槽?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!