# python Qtquick elementUI **Repository Path**: mice/python-qtquick-element-ui ## Basic Information - **Project Name**: python Qtquick elementUI - **Description**: 这是一个基于QTquick的 python版本的element UI 组件库,面向桌面企业级开发。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-06 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Element UI风格的Python QtQuick组件库

Python Version Qt Version License Status

基于Element UI设计规范的企业级Python QtQuick UI组件库,提供丰富的UI组件,支持灵活的数据绑定、组件间通信、表单验证等功能,让开发者能够像搭积木一样快速构建复杂的企业级应用。 ## ✨ 特性 - 🎨 **Element UI设计** - 遵循Element UI的设计语言和交互规范 - 🔧 **企业级组件** - 提供完整的企业级组件解决方案 - 📦 **模块化设计** - 支持灵活的组件组合和扩展 - 🚀 **高性能** - 虚拟滚动、懒加载等性能优化 - 🎯 **数据绑定** - 完整的MVVM模式数据绑定系统 - 🎨 **主题系统** - 支持主题定制和响应式设计 - 📝 **表单验证** - 内置验证规则和自定义验证支持 - 🔒 **企业级安全** - 输入验证、权限控制等安全机制 ## 📋 技术架构 - **核心框架**: Python + QtQuick (PySide2/PySide6 或 PyQt5/PyQt6) - **UI描述语言**: QML (Qt Meta-Object Language) - **样式系统**: Qt Quick Controls 2 + 自定义样式 - **构建工具**: Python setuptools - **包管理**: pip ## 📁 项目结构 ``` element-plus/ ├── element_ui/ │ ├── __init__.py │ ├── core/ # 核心模块 │ │ ├── __init__.py │ │ └── binding.py # 数据绑定系统 │ ├── components/ # UI组件 │ │ ├── __init__.py │ │ ├── Button.qml # 按钮组件 │ │ ├── button.py # 按钮组件逻辑 │ │ ├── input.py # 输入框组件 │ │ ├── form.py # 表单组件 │ │ ├── table.py # 表格组件 │ │ └── upload.py # 上传组件 │ ├── styles/ # 样式主题 │ │ ├── __init__.py │ │ ├── theme_manager.py # 主题管理器 │ │ ├── style_engine.py # 样式引擎 │ │ └── themes.py # 默认主题配置 │ ├── utils/ # 工具函数 │ │ └── __init__.py │ └── models/ # 数据模型 │ ├── __init__.py │ └── observable.py # 可观察对象 ├── examples/ # 示例项目 │ ├── ButtonExample.qml # 按钮示例 │ └── main.py # 基础使用示例 ├── tests/ # 测试用例 │ ├── test_binding.py # 数据绑定测试 │ └── test_components.py # 组件测试 ├── docs/ # 文档 │ └── README.md # 使用文档 ├── requirements.txt # 依赖文件 └── README.md # 项目说明 ``` ## 🎯 功能特性 ### 🔧 数据绑定系统 - **MVVM模式**: 完整实现Model-View-ViewModel架构模式 - **双向绑定**: 支持数据和UI的双向同步更新 - **数据验证**: 内置验证机制,支持自定义验证规则 - **复杂数据**: 支持嵌套对象、数组等复杂数据结构的绑定 - **性能优化**: 精准的变更检测和批量更新机制 ### 🎨 样式和主题系统 - **Element UI设计**: 完全遵循Element UI的设计规范和视觉风格 - **主题定制**: 支持自定义主题配置和主题切换 - **响应式设计**: 支持多种设备屏幕尺寸的自适应布局 - **CSS映射**: 提供CSS到QML样式的智能映射系统 - **颜色系统**: 完整的颜色管理和色彩混合计算功能 ### 📦 组件库 1. **基础组件**: - Button(按钮)- 支持多种类型和状态 - Icon(图标)- 丰富的图标库 - Typography(排版)- 统一的文本样式 - Layout(布局)- 灵活的布局组件 2. **表单组件**: - Input(输入框)- 支持多种输入类型和验证 - Select(选择器)- 下拉选择和多选支持 - Radio/Checkbox(单选/多选)- 表单选择控件 - Form(表单)- 完整的表单管理和验证系统 - Upload(上传)- 文件和图片上传组件 3. **数据展示**: - Table(表格)- 功能完整的数据表格 - Tree(树形控件)- 层级数据展示 - Card(卡片)- 信息展示容器 - Badge(标记)- 状态标记组件 4. **反馈组件**: - Alert(警告)- 页面级警告提示 - Loading(加载)- 加载状态指示器 - Message(消息)- 全局消息提示 - Modal(模态框)- 对话框和弹窗 5. **导航组件**: - Menu(菜单)- 导航菜单组件 - Tabs(标签页)- 内容分页组件 - Breadcrumb(面包屑)- 导航路径显示 - Steps(步骤条)- 流程步骤指示 6. **其他组件**: - Tooltip(文字提示)- 鼠标悬停提示 - Popover(弹出框)- 点击弹出的内容容器 - Progress(进度条)- 进度指示器 ### 🌟 特殊组件功能 #### 📊 Table组件 - 企业级数据表格 - **分页功能**: 内置分页组件,支持远程分页和分页大小切换 - **树形表格**: 支持层级数据展示、节点展开收起、懒加载子节点 - **可编辑表格**: 行内编辑模式、批量编辑、编辑状态管理和数据验证 - **数据操作**: 多列排序、数据筛选搜索、拖拽排序、复制粘贴功能 - **行选择**: 单选、多选模式,支持跨页选择 - **虚拟滚动**: 支持大数据量的高性能展示 - **自定义渲染**: 支持自定义列渲染和操作列 #### 📝 Form组件 - 完整表单解决方案 - **验证系统**: 内置20+常用验证规则(必填、长度、邮箱、手机号等) - **自定义验证**: 支持同步和异步自定义验证函数 - **验证状态**: 实时验证反馈、错误消息显示、验证状态管理 - **表单控制**: 表单重置、字段更新、动态添加删除字段、批量操作 - **数据绑定**: 与数据模型的深度集成,支持复杂嵌套结构 - **布局支持**: 行内表单、栅格布局、自适应布局 #### 📁 Upload组件 - 文件上传解决方案 - **文件类型**: 支持图片、文档、视频等多种文件类型上传 - **上传模式**: 点击上传、拖拽上传、粘贴上传 - **预览功能**: 图片预览、文档预览、视频播放预览 - **进度管理**: 实时上传进度、暂停续传、取消上传 - **文件管理**: 文件列表展示、删除文件、重新上传 - **限制控制**: 文件大小限制、数量限制、类型限制 - **云存储**: 支持本地存储和云存储服务集成 ## 🚀 安装和使用 ### 环境要求 - Python 3.8+ - PySide6 或 PyQt6 - Qt 6.0+ ### 安装依赖 ```bash # 克隆项目 git clone https://github.com/your-username/element-plus.git # 进入项目目录 cd element-plus # 创建虚拟环境(推荐) python -m venv venv # 激活虚拟环境 # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate # 安装依赖 pip install -r requirements.txt ``` ## 📖 快速开始 ### Python端使用 ```python from element_ui import install from element_ui.components import Button, Form, Table from PySide6.QtQml import QQmlApplicationEngine from PySide6.QtWidgets import QApplication # 安装Element UI组件库 install() # 创建应用 app = QApplication([]) engine = QQmlApplicationEngine() # 在Python中创建组件实例 button = Button() button.set_text("点击我") button.set_type("primary") # 设置点击事件 def on_button_click(): print("按钮被点击了!") button.on_click = on_button_click # 加载QML文件 engine.load("main.qml") ``` ### QML端使用 ```qml import QtQuick 2.15 import QtQuick.Window 2.15 import ElementUI 1.0 // 导入Element UI组件 Window { width: 800 height: 600 visible: true title: "Element UI示例" Column { spacing: 20 padding: 20 // 基础按钮组件 Button { text: "默认按钮" } Button { text: "主要按钮" type: "primary" onClicked: console.log("主要按钮被点击") } Button { text: "成功按钮" type: "success" loading: false } // 输入框组件 Input { placeholder: "请输入内容" width: 200 } // 表单组件 Form { id: userForm model: formModel rules: formRules FormItem { label: "用户名" prop: "username" Input { placeholder: "请输入用户名" value: formModel.username onValueChanged: formModel.username = value } } FormItem { label: "邮箱" prop: "email" Input { placeholder: "请输入邮箱地址" value: formModel.email onValueChanged: formModel.email = value } } Row { spacing: 10 Button { text: "提交" type: "primary" onClicked: { userForm.validate(function(valid) { if (valid) { console.log("表单验证通过,提交数据") } }) } } Button { text: "重置" onClicked: userForm.resetFields() } } } // 表格组件 Table { width: 600 height: 300 data: tableData columns: [ { prop: "name", label: "姓名", width: 150 }, { prop: "age", label: "年龄", width: 100 }, { prop: "address", label: "地址" } ] // 启用分页 pagination: { pageSize: 10, currentPage: 1, total: 100 } onSelectionChanged: { console.log("选中行:", selectedRows) } } // 文件上传组件 Upload { action: "/api/upload" accept: "image/*" multiple: true limit: 5 onUploadSuccess: { console.log("上传成功:", result) } onUploadError: { console.log("上传失败:", error) } } } } ``` ### 数据模型定义 ```python from element_ui.models import ObservableObject class FormModel(ObservableObject): def __init__(self): super().__init__() self._username = "" self._email = "" @property def username(self): return self._username @username.setter def username(self, value): if self._username != value: self._username = value self.notify_property_changed("username") @property def email(self): return self._email @email.setter def email(self, value): if self._email != value: self._email = value self.notify_property_changed("email") # 表单验证规则 form_rules = { "username": [ {"required": True, "message": "请输入用户名", "trigger": "blur"}, {"min": 3, "max": 15, "message": "长度在 3 到 15 个字符", "trigger": "blur"} ], "email": [ {"required": True, "message": "请输入邮箱地址", "trigger": "blur"}, {"type": "email", "message": "请输入正确的邮箱地址", "trigger": "blur"} ] } ``` ## 🎨 主题和样式 ### 主题系统 ```python from element_ui.styles import ThemeManager # 创建主题管理器 theme_manager = ThemeManager() # 加载默认主题 theme_manager.load_theme("element-default") # 切换到暗色主题 theme_manager.switch_theme("element-dark") # 注册自定义主题 custom_theme = { "name": "my-theme", "variables": { "primary-color": "#FF6B6B", "success-color": "#4ECDC4", "warning-color": "#FFE66D", "danger-color": "#FF8E8E", "font-size-base": "16px" } } theme_manager.register_theme(custom_theme) ``` ### 响应式断点 - **xs**: < 768px (超小屏幕) - **sm**: 768px - 992px (小屏幕) - **md**: 992px - 1200px (中等屏幕) - **lg**: 1200px - 1920px (大屏幕) - **xl**: >= 1920px (超大屏幕) ## 🧪 测试 ```bash # 运行所有测试 python -m pytest tests/ # 运行数据绑定测试 python -m pytest tests/test_binding.py # 运行组件测试 python -m pytest tests/test_components.py # 运行测试并生成覆盖率报告 python -m pytest tests/ --cov=element_ui --cov-report=html ``` ## 📚 文档和示例 - **完整文档**: [docs/README.md](docs/README.md) - **API参考**: [docs/api/](docs/api/) - **组件示例**: [examples/](examples/) - **最佳实践**: [docs/best-practices.md](docs/best-practices.md) - **主题定制**: [docs/theming.md](docs/theming.md) ## 🏗️ 开发指南 ### 开发环境设置 ```bash # 克隆项目 git clone https://github.com/your-username/element-plus.git cd element-plus # 安装开发依赖 pip install -r requirements-dev.txt # 安装pre-commit钩子 pre-commit install ``` ### 代码规范 - 遵循 PEP8 Python 代码规范 - QML 文件使用统一的代码风格 - 组件命名采用 PascalCase - 属性和方法命名采用 camelCase ### 提交规范 ``` type(scope): description 类型包括: - feat: 新功能 - fix: 修复bug - docs: 文档更新 - style: 代码格式调整 - refactor: 代码重构 - test: 测试用例 - chore: 构建过程或辅助工具的变动 ``` ## 🤝 贡献指南 我们欢迎所有形式的贡献! 1. **Fork** 本项目 2. 创建你的特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交你的更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启一个 **Pull Request** ### 贡献类型 - 🐛 报告bug - 💡 提出新功能建议 - 📝 改进文档 - 🧪 编写测试用例 - 🔧 修复问题 - 🎨 改进UI/UX ## 📄 许可证 本项目采用 [MIT License](LICENSE) 许可证。 ## 🙏 致谢 - 感谢 [Element UI](https://element.eleme.io/) 提供优秀的设计规范 - 感谢 [Qt](https://www.qt.io/) 提供强大的跨平台框架 - 感谢所有贡献者的支持和参与 ## 📞 联系我们 - **项目主页**: https://github.com/your-username/element-plus - **问题反馈**: https://github.com/your-username/element-plus/issues - **讨论区**: https://github.com/your-username/element-plus/discussions - **邮箱**: your-email@example.com ## 🗺️ 发展路线图 - [ ] **v0.1.0** - 基础组件库(Button, Input, Form) - [ ] **v0.2.0** - 表格和数据展示组件(Table, Tree, Card) - [ ] **v0.3.0** - 导航和反馈组件(Menu, Tabs, Modal) - [ ] **v0.4.0** - 主题系统完善和性能优化 - [ ] **v0.5.0** - 企业级特性(权限控制、国际化) - [ ] **v1.0.0** - 正式版本发布 ---

Element Plus - 让企业级应用开发更简单 🚀