这是一个完整的 PyQt 多线程编程教学项目,通过对比示例展示如何解决 GUI 冻结问题。项目包含从基础到高级的 PyQt 多线程编程示例,适合初学者学习和掌握多线程技术。
- 对比教学法: 通过问题示例 vs 解决方案示例,直观理解多线程的必要性
- 渐进式学习: 从简单的GUI冻结问题到完整的企业级应用架构
- 实际应用: 包含 YOLO 目标检测等真实场景的多线程应用
- 现代并发: 展示传统 threading 与现代 concurrent.futures 的对比
- 企业级框架: 提供 UHDMSYS 多线程框架设计和实现
python-pyqt-qthread/ # 主要教学项目
├── 1.py # GUI冻结问题演示
├── 2_movetothread.py # 标准解决方案 (重点学习)
├── 3.py # 线程池技术
├── 4.py # 线程同步(QMutex)
├── 6.py # 完整应用示例
├── 7.py # UHDMSYS企业级框架
├── yolo_single_file.py # YOLO目标检测(高级应用)
└── threading_*.py # 现代并发编程示例
pyqt/ # MVP架构演示项目
pyqt_math/ # MVVM数学计算器
thread/ # 线程编程学习项目
process/ # 多进程编程学习项目
- Python 3.7+ (推荐 3.10+)
- PyQt5 或 PyQt6
- 依赖管理:uv (推荐) 或 pip
# 使用 uv (推荐)
uv pip install PyQt5
# 或使用传统方式
pip install PyQt5# 进入主项目目录
cd python-pyqt-qthread
# 1. 体验GUI冻结问题
python 1.py
# 2. 学习标准解决方案
python 2_movetothread.py
# 3. 运行完整应用
python 6.py
# 4. 体验YOLO目标检测
python yolo_single_file.py- 基础准备: 运行
1_simple.py理解PyQt基础 - 问题体验: 运行
1.py体验GUI冻结 - 核心解决方案: 详细学习
2_movetothread.py - 理论巩固: 阅读
pyqt_qthread_guide.md
- 高级技术: 学习
3.py线程池,4.py线程同步 - 完整应用: 分析
6.py完整应用架构 - 实战项目: 研究
yolo_single_file.py - 企业级框架: 学习
7.pyUHDMSYS框架
- 问题诊断: 运行
1.py了解问题 - 标准解决方案: 学习
2_movetothread.py核心模式 - 高级模式: 浏览
3.py,4.py,6.py - 实战参考: 研究
yolo_single_file.py架构
# 标准6步法
1. 创建 QThread 对象
2. 创建 Worker 对象
3. 将 Worker 移动到线程 (moveToThread)
4. 连接信号槽(通信桥梁)
5. 启动线程
6. 资源清理(deleteLater)- BaseWorker基类: 标准化的Worker生命周期管理
- 4个专用Worker: HardwareWorker、VideoStreamWorker、NeuralWorker、IOWorker
- 信号槽网络: 复杂的线程间通信机制
- 资源管理: 完善的线程创建、启动、停止、清理流程
- UI操作限制: 工作线程绝对不能直接操作UI组件
- 通信机制: 必须通过信号槽进行跨线程通信
- 资源管理: 正确的线程生命周期管理
# 定义信号
class Worker(QObject):
finished = pyqtSignal() # 无参数信号
progress = pyqtSignal(int) # 单参数信号
status = pyqtSignal(str, int) # 多参数信号
# 连接信号槽
self.worker.progress.connect(self.update_progress)- 展示单线程GUI应用程序的局限性
sleep(1)阻塞主线程,导致GUI完全无响应
- 使用 QThread + Worker 模式解决GUI冻结
- 详细的中文注释,165行代码展示完整模式
- 真实计算机视觉应用中的多线程技术
- 集成两种QThread模式,便于对比学习
- 实时视频处理和UI更新
# 运行测试
python mydocs/test_all_examples.py
# 代码质量检查
flake8 *.py --max-line-length=119 --ignore=E203,W503
mypy *.py --ignore-missing-imports --allow-untyped-defs本项目采用 MIT 许可证 - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request 来改进这个教学项目!
如有问题或建议,请通过 GitHub Issues 联系。
⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!