用Pyside2写两个线程间相互通信
时间: 2024-04-21 11:23:02 浏览: 120
Python如何实现线程间通信
5星 · 资源好评率100%
你可以使用Pyside2中的信号和槽机制来实现两个线程之间的相互通信。以下是一个简单的示例:
```python
import sys
from PySide2.QtCore import Qt, QObject, QThread, Signal
class Worker(QObject):
finished = Signal() # 自定义信号
def __init__(self):
super().__init__()
def run(self):
# 执行一些耗时操作
for i in range(5):
print(f'Worker: {i}')
self.finished.emit() # 发送信号
class MainWindow(QObject):
def __init__(self):
super().__init__()
def start_worker(self):
self.worker_thread = QThread()
self.worker = Worker()
self.worker.moveToThread(self.worker_thread)
self.worker_thread.started.connect(self.worker.run)
self.worker.finished.connect(self.worker_thread.quit)
self.worker.finished.connect(self.worker.deleteLater)
self.worker_thread.finished.connect(self.worker_thread.deleteLater)
self.worker_thread.start()
app = QCoreApplication(sys.argv)
main_window = MainWindow()
main_window.start_worker()
sys.exit(app.exec_())
```
在上述示例中,我们创建了两个类:`Worker` 和 `MainWindow`。`Worker` 类表示一个工作线程,它执行一些耗时操作并在完成后发送一个自定义的信号 `finished`。`MainWindow` 类表示主线程,它创建并启动 `Worker` 线程。
在 `MainWindow` 类中,我们通过创建一个 `QThread` 对象来管理 `Worker` 对象的线程。然后,我们将 `Worker` 对象移动到该线程中,并连接信号和槽以实现通信。`self.worker_thread.started.connect(self.worker.run)` 表示在线程启动时调用 `Worker` 对象的 `run` 方法。`self.worker.finished.connect(self.worker_thread.quit)` 表示当 `Worker` 对象发送 `finished` 信号时,终止线程。最后,我们启动 `worker_thread`。
请注意,此示例中的通信是单向的:`Worker` 线程向主线程发送信号。如果您需要实现双向通信,可以在 `Worker` 类中添加更多的信号,并在 `MainWindow` 类中进行连接和处理。
这里只是一个简单的示例,您可以根据自己的需求进行修改和扩展。希望对您有所帮助!
阅读全文