# qtpython **Repository Path**: birdman1992/qtpython ## Basic Information - **Project Name**: qtpython - **Description**: qt和python双向交互 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-09 - **Last Updated**: 2025-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PythonBindServer ## 项目简介 PythonBindServer是一个独立的C++库,用于在Qt应用程序中管理Python环境。它提供了以下核心功能: 1. 管理多个QObject对象及其关联的Python脚本 2. 支持对象间的属性访问和修改 3. 提供安全的跨对象交互机制 4. 维护对象注册表和脚本管理器 ## 功能特性 - **多对象管理**:支持注册和管理多个QObject对象 - **脚本关联**:每个QObject可以关联独立的Python脚本 - **属性访问**:支持对象间安全的属性读写操作 - **函数调用**:支持调用对象关联脚本中的函数 - **类型转换**:自动处理Qt类型与Python类型的转换 - **异常处理**:完善的异常处理机制 ## 项目结构 ``` PythonBindServer/ ├── CMakeLists.txt # 项目构建文件 ├── README.md # 项目说明文档 ├── doc/ # 文档目录 │ ├── requirements.md # 需求文档 │ ├── design.md # 设计文档 │ ├── implementation_plan.md # 实现计划 │ ├── api_documentation.md # API文档 │ └── testing_plan.md # 测试计划 ├── src/ # 源代码目录 │ ├── core/ # 核心模块 │ │ ├── PythonBindServer.h # Python绑定服务器实现 │ │ ├── PythonBindServer.cpp# Python绑定服务器实现 │ │ ├── ServerManager.h # 服务管理器 │ │ ├── ServerManager.cpp # 服务管理器实现 │ │ ├── ObjectRegistry.h # 对象注册表 │ │ ├── ObjectRegistry.cpp # 对象注册表实现 │ │ ├── ScriptManager.h # 脚本管理器 │ │ ├── ScriptManager.cpp # 脚本管理器实现 │ │ ├── PropertyAccessor.h # 属性访问器 │ │ └── PropertyAccessor.cpp# 属性访问器实现 │ ├── exceptions/ # 异常处理模块 │ ├── utils/ # 工具模块 │ └── include/ # 公共头文件 ├── server/ # 服务接口目录 │ └── IPythonBindServer.h # Python绑定服务器接口 ├── examples/ # 示例代码目录 ├── tests/ # 测试代码目录 ├── scripts/ # 脚本目录 └── third_party/ # 第三方依赖 ``` ## 依赖要求 - Qt5 (Core, Widgets) - Python 3.6+ - PyBind11 - CMake 3.16+ ## 构建说明 ### Windows ```cmd mkdir build cd build cmake .. -G "Visual Studio 16 2019" cmake --build . --config Release ``` ### Linux/macOS ```bash mkdir build cd build cmake .. make ``` ## 测试说明 构建完成后,可以运行测试来验证功能: ```bash cd build ctest ``` ## 使用示例 ```cpp #include "PythonQtEnvManager.h" int main() { // 获取服务管理器实例 auto& serverManager = ServerManager::getInstance(); // 获取默认的Python绑定服务器实例 auto pythonBindServer = serverManager.getDefaultPythonBindServer(); // 初始化Python环境 pythonBindServer->initialize(); // 注册QObject对象 QObject* obj1 = new QObject(); QObject* obj2 = new QObject(); pythonBindServer->registerObject(obj1, "object1", "script1.py"); pythonBindServer->registerObject(obj2, "object2", "script2.py"); // 对象间属性访问 pythonBindServer->setProperty("object2", "text", "Hello from object1"); return 0; } ``` ## Python脚本使用示例 在Python脚本中,可以通过以下方式访问和修改其他对象的属性: ```python # example_script.py import sys def on_property_changed(): # 获取环境管理器 env_manager = sys.modules['__main__'].env_manager # 方法1: 通过环境管理器接口访问其他对象 value = env_manager.get_property("other_object_id", "some_property") env_manager.set_property("other_object_id", "another_property", "new_value") # 方法2: 通过对象引用直接访问 other_obj = env_manager.get_object_reference("other_object_id") value = other_obj.property("some_property") other_obj.setProperty("another_property", "new_value") return "处理完成" ``` ## 许可证 MIT License