67 lines
3.4 KiB
Python
67 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
PyQt5 全局信号定义
|
||
─────────────────────────────────────────────────────────────────
|
||
使用 QObject + pyqtSignal 定义所有 IO 信号,
|
||
支持跨线程安全分发(Qt 自动处理线程间信号队列)
|
||
─────────────────────────────────────────────────────────────────
|
||
"""
|
||
|
||
from PyQt5.QtCore import QObject, pyqtSignal
|
||
|
||
|
||
class IOSignals(QObject):
|
||
"""
|
||
统一 IO 信号集合(单例)
|
||
所有输入/输出/处理器通过此信号对象通信
|
||
|
||
信号说明:
|
||
input_received —— 原始输入到达
|
||
input_processed —— 输入处理完成,携带处理结果
|
||
output_ready —— 输出就绪,通知输出模块渲染
|
||
error_occurred —— 任意环节发生错误
|
||
status_changed —— IO 状态变更(pending/processing/done)
|
||
progress_updated —— 长任务进度更新(0~100)
|
||
"""
|
||
|
||
# ── 输入信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, io_type: str, raw_data: object)
|
||
input_received = pyqtSignal(str, str, object)
|
||
|
||
# ── 处理信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, io_type: str, result: object)
|
||
input_processed = pyqtSignal(str, str, object)
|
||
|
||
# ── 输出信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, io_type: str, output_data: object)
|
||
output_ready = pyqtSignal(str, str, object)
|
||
|
||
# ── 错误信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, source: str, error_msg: str)
|
||
error_occurred = pyqtSignal(str, str, str)
|
||
|
||
# ── 状态信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, status: str)
|
||
status_changed = pyqtSignal(str, str)
|
||
|
||
# ── 进度信号 ──────────────────────────────────────────────────
|
||
# (data_id: str, progress: int)
|
||
progress_updated = pyqtSignal(str, int)
|
||
|
||
# ── 语音专用 ──────────────────────────────────────────────────
|
||
# (text: str)
|
||
speech_recognized = pyqtSignal(str)
|
||
# (text: str)
|
||
tts_finished = pyqtSignal(str)
|
||
|
||
# ─── 单例 ────────────────────────────────────────────────────
|
||
_instance = None
|
||
|
||
def __new__(cls, *args, **kwargs):
|
||
if cls._instance is None:
|
||
cls._instance = super().__new__(cls)
|
||
return cls._instance
|
||
|
||
|
||
# 全局信号总线实例(全模块共享)
|
||
io_signals = IOSignals() |