Skip to main content

YUT - 轻量级 GUI 应用系统框架库

YUT 是一个用于构建企业级 GUI 应用系统的轻量级框架库,可以实现基于数据库的两层架构应用系统。基于 PySide6 和 SQLAlchemy 构建,提供从前端界面到后端数据的完整解决方案。

✨ 特性亮点

🎨 前端 UI 组件(yui)

  • 现代化界面:基于 PySide6,支持深色/浅色主题切换
  • 导航框架:侧边栏导航、标签页管理、Logo 展示
  • 通用表单:动态表单生成、数据验证、自定义字段类型
  • 数据表格:支持排序、筛选、分页、自定义渲染
  • 树形列表:层级数据展示、懒加载、图标定制
  • 查找选择器:支持单选/多选、树形选择、自定义视图
  • 统计图表:交叉统计、分组统计、可视化展示

💾 后端数据组件(yus)

  • ORM 扩展:基于 SQLAlchemy 的增强封装
  • 数据集管理:统一的查询接口和数据访问层
  • 字段规范:丰富的数据类型定义(文本、金额、日期、百分比等)
  • 查询操作符:完整的 CRUD 操作支持(=, >, <, LIKE, IN 等)
  • 数据转换:DataFrame 与 JSON 的高效序列化/反序列化
  • 业务逻辑层:支持复杂业务规则的实现

🔧 核心工具库(yut)

  • 异步处理:线程池、任务队列、信号槽机制
  • 数据工具:类型转换、格式化、安全计算
  • JSON 处理:对象序列化、Base64 编码
  • Windows 集成:进程模型 ID 设置、系统托盘

📦 安装

环境要求

  • Python >= 3.12
  • Windows 10/11(推荐)或 Linux/macOS

使用 Poetry 安装(推荐)

# 克隆仓库
git clone https://gitee.com/jy_tao/yut.git
cd yut

# 安装依赖
poetry install

# 激活虚拟环境
poetry shell

使用 pip 安装

pip install -r requirements.txt

主要依赖

  • PySide6 ~= 6.9.0 - Qt6 Python 绑定
  • SQLAlchemy ~= 2.0.41 - ORM 框架
  • Pandas ~= 2.3.0 - 数据处理
  • Jinja2 ~= 3.1.6 - 模板引擎
  • Matplotlib ~= 3.9.0 - 图表绘制

🚀 快速开始

1. 创建基础应用

from yui import create_default_app, Theme
from PySide6.QtWidgets import QLabel, QVBoxLayout, QWidget

# 创建应用实例
app = create_default_app(theme=Theme.DARK, app_name='我的应用')

# 创建主窗口
window = QWidget()
window.setWindowTitle('Hello YUT')
layout = QVBoxLayout(window)
layout.addWidget(QLabel('欢迎使用 YUT 框架!'))
window.show()

# 启动事件循环
app.exec()

2. 使用数据组件

from yus import ColumnSpec, Op, UnitType
from yus.dbm import get_db, get_qm

# 初始化数据库环境
get_db().init_engine('sqlite:///mydb.db')

# 查询数据
df_org = get_qm().get_selection('DW_ORG').query(ORG_SCHEMA=1).dataframe()

# 带条件的查询
df_psn = get_qm().get_selection('DW_PSN').query(
    ORG_NO='ORG001',
    YEAR=2025,
    EMPL_STATE=(Op.NEQ, 3)  # 排除离职员工
).dataframe()

3. 创建数据表格组件

from yui.ytable import YTableWidget
from yui.ymodel import PandasModel
from yus import ColumnSpec, UnitType

# 定义列规格
column_specs = [
    ColumnSpec(name='EMP_NO', comment='员工编号', utype=UnitType.TEXT),
    ColumnSpec(name='EMP_NAME', comment='姓名', utype=UnitType.TEXT),
    ColumnSpec(name='SALARY', comment='工资', utype=UnitType.CURRENCY),
]

# 创建数据模型
model = PandasModel(dataframe, column_specs)

# 创建表格组件
table = YTableWidget(title='员工信息表', model=model)
table.show()

4. 使用查找选择器

from yui.ylookup import YLookup, YLookupDialog, YViewBuilder
from yus import UnitType

class OrgLookup(YLookup):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def create_dialog(self) -> YLookupDialog:
        return YLookupDialog(
            title='选择组织机构',
            view_type=YLookupViewType.Tree,
            view_builder=YViewBuilder(
                headers={'机构': '[{ORG_NO}] - {ORG_SHORT}',
                         '名称': '{ORG_NAME}'},
                loader=self.load_org_tree,
            ),
        )
    
    def load_org_tree(self, parent_org):
        # 加载树形数据
        return org_list

# 使用查找器
org_field = YFdCriteria(
    column_spec=ColumnSpec(name='ORG_NO', utype=UnitType.LOOKUP),
    lookup_key='my_module.OrgLookup'
)

📁 项目结构

yut-proj/
├── src/                        # 核心源代码
│   ├── yut/                    # 核心工具库
│   │   ├── __init__.py         # 基础工具函数
│   │   ├── asynx.py            # 异步处理和多线程
│   │   ├── mes.py              # 消息处理
│   │   ├── rmi.py              # 远程方法调用
│   │   └── win32.py            # Windows 系统集成
│   ├── yui/                    # GUI 组件库
│   │   ├── __init__.py         # UI 基础组件
│   │   ├── wdg.py              # 通用 Widget
│   │   ├── yfield.py           # 字段输入组件
│   │   ├── yform.py            # 表单组件
│   │   ├── ylookup.py          # 查找选择器
│   │   ├── ymodel.py           # 数据模型
│   │   ├── ytable.py           # 表格组件
│   │   ├── ytree.py            # 树形组件
│   │   └── images/             # 图标资源
│   └── yus/                    # 数据服务库
│       ├── __init__.py         # 数据规范定义
│       └── dbm.py              # 数据库管理
├── examples/                   # 示例代码
│   ├── yut_demo.py             # UI 框架演示
│   ├── yus_demo.py             # 数据组件演示
│   └── lazy_load.py            # 懒加载查询示例
├── example_package_yours/      # 完整应用示例
│   └── ndw/                    # NDW 业务系统
├── templates/                  # 代码模板
│   └── db_models.ptl           # 数据库模型模板
├── tests/                      # 测试用例
├── pyproject.toml              # Poetry 项目配置
├── requirements.txt            # pip 依赖列表
└── readme.md                   # 本文档

📖 使用场景

适用场景

✅ 企业内部管理系统(ERP、CRM、OA 等)
✅ 数据分析和报表系统
✅ 业务监控和仪表盘
✅ 快速原型开发
✅ 数据库管理工具

技术架构

┌─────────────────────────────────────┐
│         GUI 前端 (PySide6)          │
│  ┌───────┬───────┬───────┬───────┐  │
│  │ 主窗口 │ 导航  │ 表单  │ 表格  │  │
│  └───────┴───────┴───────┴───────┘  │
└─────────────────────────────────────┘
              ↕ JSON/Pandas
┌─────────────────────────────────────┐
│       业务逻辑层 (Python)            │
│  ┌───────┬───────┬───────┬───────┐  │
│  │查询器 │ 验证  │ 计算  │ 转换  │  │
│  └───────┴───────┴───────┴───────┘  │
└─────────────────────────────────────┘
              ↕ SQLAlchemy
┌─────────────────────────────────────┐
│         数据库层                     │
│  ┌───────┬───────┬───────┬───────┐  │
│  │SQLite │MySQL  │PG     │Oracle │  │
│  └───────┴───────┴───────┴───────┘  │
└─────────────────────────────────────┘

🔍 更多示例

详细示例请参考 examples/ 目录:

  • yut_demo.py - UI 组件综合演示(主窗口、导航、表格、表单等)
  • yus_demo.py - 数据查询和业务逻辑示例
  • lazy_load.py - 大数据量懒加载查询优化

🛠️ 开发指南

运行测试

python -m pytest tests/

代码风格

  • 遵循 PEP 8 规范
  • 使用 UTF-8 编码
  • 中文注释(业务逻辑部分)

📝 版本说明

当前版本使用 Git 标签自动管理,基于 setuptools-scm。

# 查看当前版本
poetry version

# 发布新版本
git tag v0.2.21
git push origin v0.2.21

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

📧 联系方式


Happy Coding with YUT! 🚀

Metadata

Release files for yut 0.2.28

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yut 0.2.28
File Size Uploaded
yut-0.2.28.tar.gz 5.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for yut 0.2.28
File Interpreter ABI Platform
yut-0.2.28-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 10.6 MB

Release files / yut-0.2.28.tar.gz

Download URL yut-0.2.28.tar.gz
Size 5.2 MB
Tags Source
SHA-256 checksum
How to use checksums
b0b73b0153a7273050468616707cf13358838a4ac8edb92541faa3d63f319b31
BLAKE2b-256 checksum
How to use checksums
32d9ad9f9592cc822159c56090ee1bd7d55031c3ae83da3850aa8976a11c4623
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.12.4 Windows/11

Release files / yut-0.2.28-py2.py3-none-any.whl

Download URL yut-0.2.28-py2.py3-none-any.whl
Size 5.4 MB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
47dba8a7e35cfc4c5f9d0c42b2e82cb1fc2eba25436ed8e35bd42c59587d86b3
BLAKE2b-256 checksum
How to use checksums
358281d59ccbf3c8a6cbb837c3568a71b03ac8cc55ebbfcc42254777181eb0d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.12.4 Windows/11

Release history Release notifications | RSS feed

This release

0.2.28 This release

2 release files

0.2.25

2 release files

0.2.24

2 release files

0.2.23

2 release files

0.2.21

2 release files

0.2.20

2 release files

0.2.19

2 release files

0.2.18

2 release files

0.2.17

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.13

2 release files

0.2.9

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page