Skip to main content

ElaWidgetTools

Fluent Design UI component library for Qt Widgets and PySide6. Build modern cross-platform desktop apps with 100+ widgets, light/dark themes, frameless navigation, routing and rich application interactions.

PyPI Python Qt Widgets License

核心特性

  • 100+ 现成组件:按钮、输入、卡片、数据展示、导航布局、弹出交互和编辑器等常用桌面控件。
  • C++ 与 Python 双入口:原生 Qt Widgets 库可直接用于 C++,并通过 Shiboken6 提供可安装的 PySide6 绑定。
  • 现代化桌面框架:无边框窗口、侧边导航、面包屑、声明式路由、事件总线和停靠面板。
  • Fluent Design 视觉体系:Light/Dark 主题、Mica/Acrylic 材质、动效反馈和高 DPI 支持。
  • 跨平台支持:覆盖 Windows、Ubuntu/Kylin 和 macOS 桌面应用场景。

快速开始

使用 Python / PySide6

pip install --upgrade ElaWidgetTools

git clone https://github.com/CyberWon/PySide6ElaWidgetTools.git
cd PySide6ElaWidgetTools
python PySide6Example/main.py

Wheel 会自动声明并依赖运行所需的 PySide6。如需从源码构建绑定,请参考下文的 PySide6 绑定。

构建 C++ 示例

git clone https://github.com/CyberWon/PySide6ElaWidgetTools.git
cd PySide6ElaWidgetTools

cmake -B build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_PREFIX_PATH="/path/to/Qt/6.x/<platform-kit>"
cmake --build build --config Release --target ElaWidgetToolsExample

将 <platform-kit> 替换为本机的 Qt Kit 目录,例如 Windows 的 msvc2022_64、Linux 的 gcc_64 或 macOS 的 macos。构建产物位于 build/ElaWidgetToolsExample/。

简介

本项目基于 Liniyous/ElaWidgetTools 独立修改发展而来。

基于 Qt Widget 开发的 FluentUI 风格组件库,提供不限于组件的常用集成功能。目前共有 100+ 个公开组件,涵盖基础控件、数据展示、导航布局、弹出交互、编辑输入等类别。完整 API 文档见 doc/API.md。

支持平台

Windows Ubuntu/Kylin macOS
win-badge ubuntu-badge macos-badge

Qt 版本兼容性

⚠️ 不建议在 Windows 上使用 Qt 6.11.0。 该版本在 Windows 平台存在 Popup 窗口透明区域合成行为变更的 bug,导致使用 drawEffectShadow 绘制阴影的组件出现透明边框(macOS 不受影响)。此问题已在下一版本中修复。本项目通过 Q_OS_WIN && QT_VERSION_CHECK(6, 11, 0) 条件编译针对该版本进行了适配,但仍建议升级或使用其他版本以获得最佳体验。

主界面预览

ElaWidgetTools light-theme application window with navigation and component examples
ElaWidgetTools dark-theme application window with navigation and component examples

支持的组件

基础设施

组件 说明 备注
ElaApplication 程序初始化 主题/显示模式初始化,Mica/Acrylic效果
ElaTheme 主题管理器 Light/Dark 主题切换
ElaWindow 带导航栏的无边框窗口 侧边导航栏+堆栈页面+面包屑+路由
ElaWidget 无边框模态窗口 独立的无边框弹出窗口
ElaAppBar 窗口顶部标题栏 支持拖动窗口,最小化、最大化、关闭窗口、调整窗口尺寸
ElaNavigationRouter 路由跳转 前进/后退导航历史管理
ElaRouter 声明式路由器 路由表/守卫/动态路由/懒加载/嵌套路由,类 Vue Router
ElaEventBus 事件总线 跨组件解耦通信
ElaIcon 图标 3500+ FluentUI 图标
ElaLog 消息日志 分级日志输出与管理

按钮与输入

组件 说明 备注
ElaPushButton 按钮 支持图标、自定义颜色
ElaIconButton 图标按钮 纯图标按钮,支持悬停效果
ElaToolButton 带下拉菜单的工具按钮 支持弹出菜单和图标文字组合
ElaSplitButton 分裂按钮 左侧主操作+右侧下拉菜单,独立Hover/Press
ElaToggleSwitch 开关按钮 滑动动画,支持拖拽切换
ElaToggleButton 切换按钮 点击切换选中/未选中状态
ElaCheckBox 勾选框 支持三态(选中/未选中/半选)
ElaRadioButton 单选按钮 互斥选择,支持按钮组
ElaComboBox 下拉框 自定义弹出容器样式
ElaMultiSelectComboBox 多选下拉框 支持多项选择,标签展示
ElaLineEdit 输入框 焦点动画,自定义样式
ElaPasswordBox 密码输入框 带眼睛图标切换显示/隐藏密码
ElaPlainTextEdit 文本编辑框 多行文本输入
ElaSpinBox 微调框 整数输入,上下箭头调节
ElaDoubleSpinBox 微调框 浮点数输入
ElaNumberBox 增强数字输入框 加减按钮、鼠标滚轮、键盘方向键、双击编辑、范围限制
ElaSlider 拖动条 水平/垂直,自定义样式
ElaKeyBinder 单按键绑定器 支持macOS Fn键,快捷键录制
ElaCaptcha 验证码输入框 分格输入,自动跳格,支持粘贴分发和键盘导航,数字/字母模式
ElaRatingControl 星级评分 支持Hover预览、只读模式,可配置星星数量
ElaSuggestBox 建议搜索框 输入联想,自动补全建议列表
ElaDropDownButton 下拉按钮 整个按钮触发下拉菜单,支持图标+文字
ElaSelectorBar 分段选择器 滑动指示条动画,支持图标,筛选/模式切换
ElaTransfer 穿梭框 双列表互选,支持搜索过滤、全选、主题跟随
ElaEmojiPicker 表情选择器 Telegram风格,分类标签页+搜索+最近使用+网格选择
ElaAutoComplete 自动补全输入框 实时过滤建议列表,支持包含/前缀/后缀/正则表达式匹配,高亮匹配文字
ElaTreeSelect 树形选择下拉框 弹出树形视图选择叶节点,支持搜索过滤、路径显示、展开/收起自适应高度
ElaUploadArea 文件上传区域 拖拽/点击上传,文件类型/大小/数量验证,文件列表管理,自定义对话框标题
ElaCopyButton 一键复制按钮 点击复制到剪贴板,图标切换反馈动画,支持纯图标/图标+文字模式

数据展示

组件 说明 备注
ElaText Text文本 支持多种预设样式(Caption/Body/Title/Display)
ElaInfoBadge 信息徽章 支持Dot/数值/图标三种模式,5种严重等级颜色
ElaTag 标签/胶囊 支持5种颜色、可关闭、可选中模式
ElaPersonPicture 头像控件 支持图片/首字母/默认图标,圆形裁剪
ElaStatCard 统计卡片 大数字+趋势箭头+描述,支持图标和三种趋势类型
ElaProgressBar 进度条 支持进度模式和忙碌动画模式
ElaProgressRing 进度环 环形进度,支持百分比显示和忙碌动画
ElaSteps 步骤进度指示器 完成/当前/待定状态,支持上一步/下一步
ElaTimeline 时间线 时间戳+标题+内容+可选图标,垂直布局
ElaSkeleton 骨架屏加载占位 Text/Circle/Rectangle三种形态,Shimmer动画
ElaDivider 分隔线 支持水平/垂直,可带文字(左/中/右对齐)
ElaLCDNumber LCD数字显示 仿液晶屏数字显示
ElaCountdown 倒计时组件 天/时/分/秒翻牌显示,支持目标时间和剩余秒数两种模式
ElaQRCode 二维码生成器 输入文本/URL 生成二维码,支持自定义颜色和导出 Pixmap

卡片

组件 说明 备注
ElaAcrylicUrlCard 带图片的交互式亚克力卡片 支持URL跳转
ElaImageCard 图片卡片 圆角图片展示
ElaInteractiveCard 带图片的交互式透明卡片 鼠标悬停透明度变化
ElaPopularCard 热门卡片 适用于推荐/热门内容展示
ElaPromotionCard 促销卡片 大图+标题的推广卡片
ElaReminderCard 带图片的提醒卡片 图片+文字的提醒通知样式

导航与布局

组件 说明 备注
ElaNavigationBar 导航栏 支持展开/折叠/紧凑模式
ElaBreadcrumbBar 面包屑组件 自动处理点击事件
ElaPivot 轴转导航 Tab式页面切换导航
ElaPagination 分页导航 自动省略号,支持跳转,可配置可见页码数
ElaTabBar 选项卡 谷歌浏览器风格,支持拖拽排序
ElaTabWidget 选项卡页面 谷歌浏览器风格,内嵌页面容器
ElaScrollPage 滚动页面 自带堆栈页面和面包屑导航
ElaScrollPageArea 滚动页面区域组件 带圆角背景的区域容器
ElaScrollArea 滚动区域 可设置鼠标拖动
ElaScrollBar 滚动条 自动隐藏,悬停展开
ElaFlowLayout 流式布局 支持动画,自动换行排列
ElaExpander 折叠展开面板 支持向上/向下展开,带平滑高度动画
ElaGroupBox 分组框 带标题的控件分组容器
ElaSplitter 分割面板 可拖拽分割,FluentUI 风格手柄,支持水平/垂直

弹出与交互

组件 说明 备注
ElaMenu 菜单 支持图标、快捷键、子菜单
ElaMenuBar 菜单栏 窗口顶部菜单栏
ElaToolBar 工具栏 可停靠工具栏,支持溢出
ElaCommandBar 命令栏 带溢出菜单,图标+文字按钮,独立Hover/Press
ElaRibbonBar Ribbon 主容器 Office 风格,Tab 标签条 + 内容堆栈,支持折叠/展开动画、鼠标离开自动隐藏、右键菜单固定、可绑定外部 TabBar
ElaRibbonTabBar Ribbon 标签条 可独立放入 AppBar 标题栏的 Tab 标签条,主题主色高亮、Hover 反馈、再次点击触发折叠
ElaRibbonGroup Ribbon 分组 承载工具按钮与任意自定义控件,底部 fieldset legend 风格标题与右侧分隔线
ElaStatusBar 状态栏 窗口底部状态信息栏
ElaContentDialog 带遮罩的对话框 全窗口遮罩+居中对话框
ElaDialog 对话框 标准无边框对话框
ElaInputDialog 输入对话框 带输入框的确认对话框
ElaMessageDialog 消息对话框 确认/取消消息对话框
ElaMessageBar 弹出式信息栏 支持八方向,锚定位置
ElaMessageButton 弹出信息按钮 点击弹出带颜色的消息提示
ElaToast 轻量提示 自动消失,支持Success/Info/Warning/Error四种类型
ElaSnackbar 底部通知条 带操作按钮(如撤销),自动堆叠/重排,可配置最大数量
ElaFloatButton 悬浮操作按钮 圆形按钮,支持四角定位、菜单展开、hover 动画、自动跟随父窗口
ElaEmojiPicker 表情选择器 Telegram风格,分类标签页+搜索+最近使用+网格选择
ElaFlyout 轻量弹出面板 锚定目标控件,Light Dismiss,可嵌入自定义Widget
ElaTeachingTip 引导提示气泡 带箭头指向目标控件,支持4方向+自动定位
ElaToolTip 工具提示 悬停显示,支持自定义内容和延迟
ElaColorDialog 颜色选择器 HSV/RGB 颜色选取
ElaCalendar 日历视图 月/年视图切换,日期选择
ElaCalendarPicker 日期选择器 点击弹出日历选择日期
ElaSpotlight 聚光灯引导 全窗口遮罩挖洞高亮,支持多步骤引导和平滑过渡动画
ElaPopconfirm 气泡确认框 锚定目标控件弹出,带图标/标题/确认取消按钮,Light Dismiss
ElaRoller 滚轮选择器 纵向滚轮列表选择
ElaRollerPicker 滚轮选择器 多列滚轮组合(如时间/日期)
ElaDrawerArea 抽屉区域 可展开/收起的侧边抽屉面板
ElaInfoBar 信息栏 内嵌式持久提示,支持Info/Success/Warning/Error四种级别,可添加操作按钮,关闭动画

窗口与面板

组件 说明 备注
ElaWizard 向导窗口 多步骤对话框,内置步骤指示器,上一步/下一步/完成
ElaNotificationCenter 通知中心 右侧滑出面板,堆叠通知卡片,支持清除和滚动
ElaDockWidget 停靠窗口 可拖拽停靠的浮动面板
ElaSplashScreen 启动屏 品牌展示+加载进度,支持进度条/进度环/Logo/拖拽
ElaSheetPanel 底部滑出面板 半模态Sheet,支持三级停靠(Peek/Half/Full)和拖拽
ElaWatermark 全局水印覆盖 文字/图片水印,支持旋转角度、透明度、间距、HiDPI,鼠标事件穿透

视图

组件 说明 备注
ElaListView 列表视图 自定义委托绘制,FluentUI样式
ElaTableView 表格视图 自定义表头和行样式
ElaTableWidget 表格部件 高级表格,悬停行高亮
ElaTreeView 树型视图 可展开/折叠的层级视图
ElaGraphicsScene 高级场景 大量实用API,节点管理
ElaGraphicsView 高级视图 按键缩放、拖动,画布操作
ElaGraphicsItem 高级图元 大量实用API,自定义绘制
ElaPromotionView 促销卡片视窗 多卡片轮播展示容器
ElaVirtualList 虚拟滚动列表 万级数据量流畅滚动,批量布局+统一行高优化

编辑器与渲染

组件 说明 备注
ElaCodeEditor 代码编辑器 行号、8种语言语法高亮(C/C++/C#/Python/JS/Lua/Rust/PHP)、当前行高亮
ElaMarkdownViewer Markdown渲染器 基于QTextBrowser,支持主题切换和外部链接

聊天与终端

组件 说明 备注
ElaChatBubble 聊天气泡 左右对齐、头像、时间戳、发送状态、图片消息、双击图片预览(缩放/旋转/触摸板手势)
ElaDashboardGauge 仪表盘 动画指针、刻度/数字分区变色、警告/危险百分比、小数位控制、自定义弧宽/角度
ElaTerminalWidget 终端模拟器 命令输入输出、历史记录上下翻页、Tab补全信号、彩色输出、主题跟随

系统功能

组件 说明 备注
ElaDxgiManager DXGI采集器 支持自动选择采集设备 效率远高于原生采集
ElaScreenCaptureManager 屏幕采集 macOS ScreenCaptureKit
ElaExponentialBlur 指数模糊 高性能图像模糊处理

API 文档

完整的组件 API 文档由脚本自动生成,见 doc/API.md。

重新生成:

python3 scripts/generate_docs.py

PySide6 绑定

本项目提供基于 Shiboken6 的 PySide6 绑定基础设施,支持在 Python 中使用所有组件。

发布后的 wheel 可通过 PyPI 安装:

pip install ElaWidgetTools

当前发布流程覆盖 macOS(Python 3.10/3.12)和 Windows(Python 3.9-3.12)。发布与首次配置步骤见 RELEASING.md。

前置依赖

pip install PySide6 shiboken6 shiboken6-generator

构建绑定

# 生成 typesystem 和 global.h
python3 scripts/generate_bindings.py

# 构建 ElaWidgetTools 动态库
cmake -B build -DELAWIDGETTOOLS_BUILD_STATIC_LIB=OFF -DCMAKE_BUILD_TYPE=Release
cmake --build build --target ElaWidgetTools

# 运行 shiboken6 生成绑定代码,然后编译为 Python 模块
# 详细步骤参考 bindings/ 目录

Python 绑定已知限制

  • ElaRouter 回调守卫 API:beforeEach / afterEach / setRouteBeforeEnter 的 参数是 std::function 回调(ElaRouteGuard / ElaRouteAfterHook),shiboken6 无法 为 std::function 生成转换代码,因此这三个方法在 Python 侧不可用。其余核心路由 API(addRoute / addRoutes / addDynamicRoute / push / replace / back / forward / removeRoute 等)均已绑定。路由跳转拦截请改用 ElaWindow.addPageNode 提前注册页面 + ElaWindow.navigation(key) 方式实现; 懒加载工厂(ElaRouteConfig.factory)在 Python 侧亦不可用,请按需创建页面后再 注册。
  • ElaWindow 导航节点 out 参数:addExpanderNode / addFooterNode / addCategoryNode 的节点 key 通过 QString& out 参数回传。绑定生成阶段已通过 bindings/fix_out_params.py 自动改写,Python 侧调用约定为传 "" 占位并解包 _, key = addExpanderNode(...),返回 (NodeResult, key) 二元组。

完整示例见 PySide6Example/ 目录。

致谢

本项目基于 Liniyous/ElaWidgetTools 修改而来,感谢原作者的开源贡献。

许可证

ElaWidgetTools 使用 MIT 许可证授权所有类型项目,但要求所有分发的软件中必须保留本项目的MIT授权许可;所有未保留授权分发的商业行为均将被视为侵权行为

Metadata

Release files for elawidgettools 1.0.0

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

Built distributions (wheels)

Table of built distributions (wheels) for elawidgettools 1.0.0
File
elawidgettools-1.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
elawidgettools-1.0.0-cp312-cp312-macosx_13_0_arm64.whl CPython 3.12 CPython 3.12 macOS 13.0+ ARM64 Details
elawidgettools-1.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
elawidgettools-1.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
elawidgettools-1.0.0-cp310-cp310-macosx_13_0_arm64.whl CPython 3.10 CPython 3.10 macOS 13.0+ ARM64 Details
elawidgettools-1.0.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details

Total release size: 73.5 MB

Release files / elawidgettools-1.0.0-cp312-cp312-win_amd64.whl

Download URL elawidgettools-1.0.0-cp312-cp312-win_amd64.whl
Size 15.8 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
fe360282df4b22ff44516e01c1618e88a6b9e0e718835d4b3b324e656f77db18
BLAKE2b-256 checksum
How to use checksums
ea6e337a16876f7d4d306b9a6c64314d15b5d0400ce15f0345184e4e21715a4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / elawidgettools-1.0.0-cp312-cp312-macosx_13_0_arm64.whl

Download URL elawidgettools-1.0.0-cp312-cp312-macosx_13_0_arm64.whl
Size 5.2 MB
Tags CPython 3.12 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
337f3bb9e9059de738131484b76d3a6fd37469bbd074787eb863b73e58779ced
BLAKE2b-256 checksum
How to use checksums
2baace9008567bc614f0f8d76383eb04fd197cc6f5f8615352fdd9fbefe3947a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / elawidgettools-1.0.0-cp311-cp311-win_amd64.whl

Download URL elawidgettools-1.0.0-cp311-cp311-win_amd64.whl
Size 15.8 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0439f72f9974a0392631c44344ab20892b8980aac672b81a3d722e63496b864f
BLAKE2b-256 checksum
How to use checksums
3b0d5bec82d42cc1652e90edcf6e3ec1c90800b44f8cb8093f9ba331eaba1726
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / elawidgettools-1.0.0-cp310-cp310-win_amd64.whl

Download URL elawidgettools-1.0.0-cp310-cp310-win_amd64.whl
Size 15.8 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
90582791cee06be8bc0d05ac0686d0881c500a9ec6244029ac5b1b628b77420e
BLAKE2b-256 checksum
How to use checksums
d5c55744f116eeb35d9b084d781c5b28f2d8f8d0ade8b3b0fe6665727cc5b093
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / elawidgettools-1.0.0-cp310-cp310-macosx_13_0_arm64.whl

Download URL elawidgettools-1.0.0-cp310-cp310-macosx_13_0_arm64.whl
Size 5.2 MB
Tags CPython 3.10 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
a67546808182d4e0070a4a7c534beee6e66149d518d9feb9d943e67151ef3eb0
BLAKE2b-256 checksum
How to use checksums
a8d6d22cb58c42f500b930469436b859f3725b6cdf320b4dcd8742018cc76ad9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / elawidgettools-1.0.0-cp39-cp39-win_amd64.whl

Download URL elawidgettools-1.0.0-cp39-cp39-win_amd64.whl
Size 15.8 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
74c7fcef2da449fe681f6787bae6c92f3cbf86274ecd38dfbafebca72a04ac85
BLAKE2b-256 checksum
How to use checksums
dd1ba2e94385e6256c4ec240941139a46157aac6d3572b877c34f9cb32ead6b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

6 release files

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