Metadata-Version: 2.4
Name: fry-qt6-signal
Version: 0.1.0
Summary: A small PyQt6 global signal bus and signal manager for unified application-wide signal usage.
Project-URL: Homepage, https://gitlab.com/fanrenyi33/fry_python_lib_d150_fry_qt6_signal
Project-URL: Repository, https://gitlab.com/fanrenyi33/fry_python_lib_d150_fry_qt6_signal
Keywords: PyQt6,Qt,signal,signal-bus,fry
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: X11 Applications :: Qt
Classifier: Framework :: Pytest
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: PyQt6<6.6,>=6.5
Requires-Dist: PyQt6-Qt6<6.6,>=6.5
Requires-Dist: numpy>=1.24
Provides-Extra: dev
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: twine>=4.0; extra == "dev"

# fry-qt6-signal

`fry-qt6-signal` 是一个 PyQt6 全局信号管理组件，用来把软件中的信号定义、`emit`、`connect` 集中管理，适合中大型 Qt 程序把 UI、IO、工作流、缓存、任务进度等模块解耦。

## 安装

要求 Python 3.10+。默认依赖 PyQt6 6.5.x，这是一个相对保守、适合打包分发的 Qt6 版本范围。

```bash
pip install fry-qt6-signal
```

开发本项目时：

```bash
python -m pip install -e ".[dev]"
```

## 最小用法

```python
from fry_qt6_signal import create_signal_manager

manager = create_signal_manager()

def on_status(message: str) -> None:
    print(message)

manager.connect("status_update_signal", on_status)
manager.emit("status_update_signal", "ready")
```

## 使用发射控制器

```python
from fry_qt6_signal import Fry3dSignalEmitController, create_signal_manager

manager = create_signal_manager()
emitter = Fry3dSignalEmitController(manager)

emitter.emit_status_update_signal("开始处理")
emitter.emit_progress_update_signal(1, 10)
emitter.emit_task_completed_signal({"is_success": True, "message_str": "完成"})
```

## 使用连接控制器

```python
from fry_qt6_signal import Fry3dSignalConnectController, create_signal_manager

class MainSignalController(Fry3dSignalConnectController):
    def connect_signals(self) -> None:
        self.connect("status_update_signal", self.on_status)
        self.connect("progress_update_signal", self.on_progress)

    def on_status(self, message: str) -> None:
        print(f"status: {message}")

    def on_progress(self, current: int, total: int) -> None:
        print(f"progress: {current}/{total}")

manager = create_signal_manager()
controller = MainSignalController(manager)
```

## 常用信号

- `status_update_signal(str)`：状态栏或轻量状态消息
- `progress_update_signal(int, int)`：当前进度、总进度
- `display_image_numpy_signal(str, numpy.ndarray)`：显示或预览 NumPy 图像
- `start_processing_signal()` / `stop_processing_signal()`：处理流程控制
- `params_changed_signal(dict)`：参数变更
- `task_completed_signal(dict)`：任务完成
- `fry_3d_data_loaded_signal(dict)`：3D 数据加载完成
- `fry_3d_workflow_step_finished_signal(dict)`：工作流单步完成
- `fry_3d_workflow_finished_signal(dict)`：工作流整体完成
- `fry_3d_cache_updated_signal(dict)`：缓存信息更新

完整说明见 [docs/core_concepts.md](docs/core_concepts.md)。

## 示例

```bash
python examples/basic_usage.py
python examples/controller_usage.py
```

## 测试

```bash
python -m pytest
```

## 打包

```bash
python -m build
python -m twine check dist/*
```

生成的 wheel 和 sdist 会在 `dist/` 目录中。发布到 PyPI 前，需要先注册并确认包名 `fry-qt6-signal` 可用。
