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