pyside6实现多线程通讯
时间: 2023-10-25 17:06:56 浏览: 67
在 PySide6 中,可以使用 QThread 和信号槽机制来实现多线程通信。下面是一个简单的例子:
```python
from PySide6.QtCore import QObject, QThread, Signal
class Worker(QObject):
finished = Signal()
progress = Signal(int)
def run(self):
for i in range(1, 11):
self.progress.emit(i * 10)
QThread.sleep(1)
self.finished.emit()
class Main(QObject):
def __init__(self):
super().__init__()
self.worker = Worker()
self.thread = QThread()
self.worker.moveToThread(self.thread)
self.worker.finished.connect(self.on_finished)
self.worker.progress.connect(self.on_progress)
self.thread.started.connect(self.worker.run)
def start(self):
self.thread.start()
def on_progress(self, value):
print(f"Progress: {value}%")
def on_finished(self):
print("Finished")
if __name__ == "__main__":
main = Main()
main.start()
```
在这个例子中,我们创建了两个 QObject 类,一个是 Worker,一个是 Main。Worker 类用于执行耗时的任务,Main 类用于启动和管理 Worker 类的线程。Worker 类中定义了两个信号,一个是进度信号 progress,一个是完成信号 finished。在 run 方法中,我们使用 sleep 方法模拟了一个耗时的任务,并在循环中发射了 progress 信号。
在 Main 类中,我们创建了一个 Worker 实例和一个 QThread 实例,并将 Worker 实例移动到了 QThread 中。我们通过连接信号和槽的方式监听 Worker 实例发射的信号,当 progress 信号被发射时,会调用 on_progress 方法打印进度信息,当 finished 信号被发射时,会调用 on_finished 方法打印完成信息。
最后,我们在 if __name__ == "__main__" 中创建了 Main 实例,并调用 start 方法启动线程。这样就可以在多线程环境下执行任务并实现通信了。