本文作者对 43 种 Rust GUI 库进行调研,旨在实现文本标签与输入框联动功能,且考虑了 Windows 系统支持、屏幕阅读器可访问性及 IME 输入等因素。
众多库表现各异,如 Azul、CXX-Qt 等存在链接错误难以运行;Cushy、Floem 等在可访问性或 IME 支持上有缺陷;Dioxus、Slint 等综合表现较好。作者认为虽无完美选择,但相比 2021 年已有更多合理选项。
库名 |
是否可用 |
屏幕阅读器可访问性 |
IME 支持情况 |
问题描述 |
---|---|---|---|---|
Azul |
链接错误,无法运行 |
未提及 |
未提及 |
下载预构建.dll 困难,示例代码无法运行,版本混乱 |
cacao |
仅适用于 macOS |
未提及 |
未提及 |
不支持 Windows 系统 |
core - foundation |
仅适用于 macOS |
未提及 |
未提及 |
不支持 Windows 系统 |
Crux |
无桌面目标 |
未提及 |
未提及 |
实际不支持桌面 GUI 开发,仅用于移动和 Web |
Cushy |
是 |
否 |
部分支持 |
示例代码有错误,运行时产生大量 Vulkan/DirectX 12 错误,Windows Narrator 无法识别内容 |
CXX-Qt |
链接错误,无法运行 |
未提及 |
未提及 |
安装 Qt 需注册,示例代码有 1058 个链接错误 |
Dioxus |
是 |
是 |
是 |
通过 WebView2/WebKitGTK 支持桌面开发,类似 React,文本和 IME 功能正常 |
Dominator |
仅用于 Web |
未提及 |
未提及 |
无桌面支持 |
egui |
是 |
是 |
部分支持 |
设置简单,默认字体不支持日语字符,Tab 键选择汉字时被吃掉 |
Floem |
是 |
否 |
否 |
用于 Lapce IDE,布局构建方式奇怪,缺乏可访问性和 IME 支持 |
fltk |
是 |
需额外 crate |
是 |
布局系统不佳,添加组件方式不友好 |
flutter_rust_bridge |
部分支持,但状态管理混乱 |
是 |
部分支持,但状态管理混乱 |
与 Flutter 集成复杂,输入字段状态管理有问题 |
Freya |
是 |
否 |
否 |
依赖旧版本 Dioxus,渲染和文本识别存在问题 |
fui |
qmake 错误,无法构建 |
未提及 |
未提及 |
缺乏文档,构建失败 |
GemGui |
技术上可用,但依赖问题多 |
未提及 |
未提及 |
依赖 Python,运行方式繁琐 |
GPUI |
是 |
否 |
是 |
缺乏基本文本输入部件,文档和安装不完善 |
GTK 3 |
不再维护 |
未提及 |
未提及 |
已过时 |
GTK 4 |
是 |
否 |
是 |
窗口装饰和可访问性存在问题 |
Iced |
是 |
否 |
否 |
受 Elm 启发,在可访问性和 IME 支持上有缺陷 |
imgui |
是 |
否 |
否 |
与游戏引擎结合较好,但初始设置繁琐,支持多种渲染器导致选择困难 |
KAS |
是 |
否 |
否 |
教程过时,状态管理设计不清晰 |
kittest |
仅用于测试 |
未提及 |
未提及 |
仅支持 egui 测试 |
Leptos |
仅用于 Web |
未提及 |
未提及 |
Web 前端框架,原生 GUI 支持不足 |
lvgl |
C 依赖问题 |
未提及 |
未提及 |
配置在 Windows 上有问题 |
Makepad |
是 |
否 |
部分支持 |
缺乏文档,可访问性支持差 |
masonry |
是 |
内容可识别但位置错误 |
是,但有临时乱码 |
API 使用不太方便 |
Maycoon |
无文本输入部件 |
未提及 |
未提及 |
太新,功能不完整 |
Pax |
无 Windows 支持 |
未提及 |
未提及 |
仅支持 macOS |
qmetaobject |
不支持 windows - msvc |
未提及 |
未提及 |
与特定目标不兼容 |
relm |
使用不再维护的 GTK 3 |
未提及 |
未提及 |
依赖过时库 |
Relm4 |
是 |
否 |
是 |
基于 GTK 4,继承其问题 |
Ribir |
部分支持,但状态管理混乱 |
否 |
部分支持 |
状态管理机制有问题 |
Rinf |
不使用 Rust 构建 GUI |
未提及 |
未提及 |
不符合调研需求 |
rui |
是 |
否 |
否 |
状态管理可能较繁琐 |
Slint |
是 |
是 |
部分支持 |
有自己的 DSL,数据绑定功能巧妙,默认字体可能存在问题 |
Tauri |
是 |
是 |
部分支持 |
前端与后端通信存在问题,缺乏类型安全 |
tinyfiledialogs |
非通用 GUI 库 |
未提及 |
未提及 |
功能有限,无法完成任务 |
Tk |
是 |
否 |
是 |
安装和使用复杂,依赖外部库 |
Vizia |
是 |
结构可识别但内容不可识别 |
部分支持 |
文本字段聚焦时样式有问题 |
WebRender |
太低级,不适用于 GUI 开发 |
未提及 |
未提及 |
无 GUI 组件,是低级别图形库 |
windows |
不熟悉 Win32 API |
未提及 |
未提及 |
缺乏 GUI 开发指导 |
WinSafe |
是 |
是 |
是 |
手动布局不佳,存在窗口创建时序问题 |
Xilem |
是 |
内容可识别但位置错误 |
是,但有临时乱码 |
缺乏版本管理 |
本次调研涵盖 43 种 Rust GUI 库,各库在功能、易用性、可访问性和 IME 支持等方面表现差异较大。
作者推荐了几个表现较好的库:喜欢 CSS 布局可选 Dioxus;青睐 DSL 驱动的用户可选择 Slint;想避免 DSL 和宏,只用常规 Rust 代码的可考虑 egui;愿意早期投资的可关注 Xilem。虽然没有绝对完美的选择,但相比 2021 年,如今有更多合理的选项可供开发者选择。
原文:https://www.boringcactus.com/2025/04/13/2025-survey-of-rust-gui-libraries.html