pyqt线程间通信使用管道
时间: 2023-10-03 18:08:09 浏览: 148
在 PyQt 中,线程间通信可以通过使用管道(Pipe)来实现。下面是一个简单的示例,展示了如何在两个线程之间通过管道进行通信:
```python
from PyQt5.QtCore import QThread, pyqtSignal
from multiprocessing import Pipe
class SenderThread(QThread):
message = pyqtSignal(str)
def __init__(self, conn):
super().__init__()
self.conn = conn
def run(self):
self.conn.send("Hello from sender!")
self.message.emit("Message sent to receiver.")
class ReceiverThread(QThread):
message = pyqtSignal(str)
def __init__(self, conn):
super().__init__()
self.conn = conn
def run(self):
message = self.conn.recv()
self.message.emit(f"Message received: {message}")
if __name__ == "__main__":
parent_conn, child_conn = Pipe()
sender_thread = SenderThread(child_conn)
receiver_thread = ReceiverThread(parent_conn)
sender_thread.start()
receiver_thread.start()
sender_thread.wait()
receiver_thread.wait()
```
在上述示例中,我们使用 `multiprocessing` 模块的 `Pipe` 函数创建了两个管道。然后,我们创建了一个发送线程和一个接收线程,并将管道对象传递给它们。发送线程在运行时使用管道发送消息,接收线程则在运行时使用管道接收消息。在每个线程中,我们使用 `pyqtSignal` 来发出信号,以便在主线程中更新 GUI。
最后,我们启动这两个线程并等待它们完成。在线程完成后,我们可以在主线程中获取它们发出的信号,然后更新 GUI。
阅读全文