PyQt 中主視窗與執行緒之間共享資料
多執行緒應用程式通常需要在主視窗執行緒與工作執行緒之間共用數據。為了確保線程安全和正確的通信,PyQt 提供了幾種實用的方法。
選項 1:直接引用主視窗
在此方法中,對主視窗的引用視窗被傳遞給執行緒。然後執行緒可以直接存取主視窗中的數據,例如 spinbox 的值。
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
# ...
選項 2:訊號和槽
PyQt 使用訊號和槽在物件之間進行通訊。在這種方法中,工作執行緒在資料變更時發出訊號,主視窗槽函數處理更新。
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__()
# ...
使用哪個選項?
選擇取決於線程的需求和所需的控制級別。
線程安全注意事項
小部件不是線程安全的。因此,使用訊號和插槽來處理線程和主視窗之間的通訊至關重要。從多個執行緒直接操作小部件可能會導致意外行為。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3