首頁  >  文章  >  後端開發  >  如何在 PyQt 中的主視窗和執行緒之間安全地通訊資料?

如何在 PyQt 中的主視窗和執行緒之間安全地通訊資料?

Linda Hamilton
Linda Hamilton原創
2024-11-01 12:50:15322瀏覽

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

在PyQt 中主視窗和執行緒之間通訊資料

在PyQt 應用程式中,常見的場景涉及在主視窗和常見的場景之間共享資料線程,同時保持線程安全。以下是建議的方法:

訊號和插槽:

  • 在執行緒類別中聲明自訂 Qt 訊號,例如 beep()。
  • 將主視窗中的訊號連接到更新相關小部件的插槽,例如 update()。

範例:

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

注意事項:

  • 注意事項:
Qt>Qt的,只能從主執行緒存取。

訪問時全域變數可能無法如預期工作來自多個執行緒。

  • 其他方法:
  • 其他方法: 有風險,因為它依賴QObject 執行緒關聯並可能導致競爭條件。
保持同步副本:需要保持主視窗和執行緒之間的一致性,這可能很複雜。

以上是如何在 PyQt 中的主視窗和執行緒之間安全地通訊資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn