一、线程通信核心机制
1.1 信号与槽基础
from PyQt6.QtCore import QObject, pyqtSignal
class Worker(QObject):
progress_updated = pyqtSignal(int)
result_ready = pyqtSignal(object)
from PySide6.QtCore import QObject, Signal
class Worker(QObject):
progress_updated = Signal(int)
result_ready = Signal(object)
1.2 连接方式对比
连接类型 |
行为描述 |
适用场景 |
自动连接(Auto) |
根据线程关系自动选择直接或队列连接 |
默认模式(推荐) |
直接连接 |
立即在发送者线程执行 |
同线程内通信 |
队列连接 |
将事件放入接收者事件队列 |
跨线程通信(默认) |
阻塞队列连接 |
发送线程等待接收线程处理完成 |
需要同步的场景 |
worker.progress_updated.connect(update_ui, Qt.ConnectionType.QueuedConnection)
二、完整多线程通信案例
2.1 文件处理工作线程
class FileProcessor(QThread):
progress = Signal(int)
finished = Signal(list)
error = Signal(str)
def __init__(self, file_list):
super().__init__()
self.files = file_list
self._is_running = True
def run(self):
results = []
try:
for i, file in enumerate(self.files):
if not self._is_running:
break
time.sleep(0.5)
result = process_file(file)
results.append(result)
self.progress.emit(int((i+1)/len(self.files)*100))
se