python_qt_binding 源码详细分析
工作区路径:/home/cp/work2/ros2Learn/ros2_humble/src/ros-visualization/python_qt_binding
版本:1.1.3,许可证 BSD。
python_qt_binding 是 ROS Qt 栈的 Python Qt 绑定抽象层:统一 PyQt5 与 PySide2 的导入路径,使 qt_gui、rqt 等包无需关心底层绑定实现。
1. 仓库结构
1 | python_qt_binding/ |
2. 核心机制
2.1 绑定选择
1 | def _select_qt_binding(binding_name=None, binding_order=None): |
优先级:PyQt5 > PySide2(可通过环境或参数指定)。
2.2 统一导入
应用代码写法:
1 | from python_qt_binding.QtCore import QObject, Signal, Slot |
__init__.py 在 import 时调用 _select_qt_binding(),设置全局 QT_BINDING、QT_BINDING_VERSION。
2.3 CMake 辅助
为需要 SIP/Shiboken 生成 C++ Python 绑定的包(如 qt_gui_cpp)提供 sip_helper.cmake、shiboken_helper.cmake。
3. 在栈中的位置
所有 Python 版 rqt 插件 必须 通过本包导入 Qt,禁止直接 import PyQt5。
4. 依赖
- 运行时:
python3-pyqt5或pyside2(二选一) - 构建:
ament_cmake+ 可选 SIP 工具链
5. 测试
test_imports.py 验证 QtCore、QtGui、QtWidgets 可导入。
6. 小结
python_qt_binding 体量小但 全栈依赖:解决 ROS 生态中 PyQt/PySide 分裂问题,是 qt_gui_core 与所有 Python rqt 插件的基础。
正在加载留言…