5 个不稳定版本
0.4.2 | 2024年7月9日 |
---|---|
0.4.1 | 2024年4月2日 |
0.4.0 | 2024年2月29日 |
0.3.0 | 2023年11月9日 |
0.2.0 | 2023年10月30日 |
在 Rust 模式 中排名第 460
每月下载量 265 次
50KB
819 行
EguiStruct
EguiStruct 是一个 Rust derive 宏,可以从任意结构和枚举创建 egui UI。这对于生成可以在 egui UI 中修改和显示的数据绑定很有用。
库的想法类似于以下 crate:egui-probe、enum2egui、egui_inspect 和 egui-controls,但也有一些重要的区别。
EguiStruct 与类似 crate 的比较
EguiStruct | egui-probe | enum2egui | egui_inspect | egui-controls | |
---|---|---|---|---|---|
egui 版本 | 0.26 (0.21-0.28) **** | 0.27/0.28 | 0.23/0.24.1/0.26 | 0.20 | N/A |
布局* | 网格 | 网格 | 分组/嵌套 | 嵌套 | 网格 |
国际化支持 | ✅ (rust-i18n**) | ❌ | ❌ | ❌ | ❌ |
字段描述 | ✅ 鼠标悬停提示(来自属性) | ❌ | ❌ | ❌ | ✅ 第三列(来自文档注释) |
重命名字段/变体 | ✅ | ✅ | ✅/❌ (仅枚举) | ❌ | ❌ |
大量名称大小写转换 | ✅ | ✅ | ❌ | ❌ | ❌ |
回调-on-change | ✅ | ❌ | ❌ | ❌ | ❌ |
重置按钮 | ✅ | ❌ | ❌ | ❌ | ❌ |
跳过字段 | ✅ | ✅ | ✅ | ✅ | ❌ |
数值和字符串支持 | ✅ | ✅ | ✅ | ✅ | ✅ |
Vec 支持 | ✅/❌ (不支持添加/删除元素) | ✅ std, smallvec1/2 | ✅ | ✅ | ❌ |
其他支持 | ✅ bool, Option, [T;N] | ✅ bool, Option, [T;N],一些 egui 类型 | ✅ bool, Option | ✅ bool, [T;N] | ❌ |
HashMap/Set 支持 | ✅ std, indexmap | ✅ std, hashbrown | ✅ std, hashbrown | ❌ | ❌ |
映射字段/覆盖实现 | ✅ | ✅ | ❌ | ✅ | ❌ |
结构 derive | ✅ | ✅ | ✅ | ✅ | ✅ |
枚举 derive | ✅ | ✅ | ✅ | ❌ | ❌ |
derive 中的自定义类型 | ✅ | ✅ | ✅ | ✅ | ❌ |
配置数值 | ✅ 滑块(min,max),滑块(min,max,step),拖动值(min,max),拖动值,列表 | ✅ 拖动值(min,max),拖动值 | ❌ | ✅ 滑块(min,max),拖动值 | ❌ |
配置字符串 | ✅ 多行/单行,列表 | ✅ 多行/单行 | ❌ | ✅ 多行/单行 | ❌ |
配置用户类型 | ✅ | ❌ | ❌ | ❌ | ❌ |
配置其他 | ❌ | ✅ Color32, bool, 枚举(组合框或内联按钮),集合/向量/映射 | ❌ | ❌ | ❌ |
列表/组合框包装器 | ✅ *** | ❌ | ❌ | ❌ | ❌ |
* 所有内容都放在滚动&网格布局中(带可折叠行)
- Gui 更有序
- 所有值对齐
- Gui 在宽度上紧凑
** 集成/考虑国际化(使用 rust-i18n crate(或使用提取器 修改的 rust-i18n))
*** 将 T: Clone + ToString + PartialEq
类型包装到 Combobox<T>
中,并通过 config
属性迭代器传递所有可能的值 → 字段将以组合框的形式显示
**** 请参阅 Usage >> egui 版本
部分 (EguiStruct
通过功能支持 egui 的所有版本;其他 crate 只支持“最新”版本,其他版本的支持是通过使用旧版本实现的)
使用方法
基本描述
将 egui_struct
添加到您的 Cargo.toml
egui_struct = "0.4"
将 derive 宏 EguiStruct
添加到您想要显示的结构体(以及所有嵌套类型)中
#[derive(EguiStruct)]
pub struct TupleStruct(u8, u32, String, SubData);
然后,要显示数据,您只需要在顶层结构体上调用 show_top(..)
egui::CentralPanel::default().show(ctx, |ui| {
data.show_top(ui, RichText::new("Data").heading(), None);
});
详细描述
请参阅 文档。
示例
请参阅 ./demo
egui 版本
egui_struct 0.4
默认依赖于 egui 0.26
。要使用其他版本的 egui,请在 Cargo.toml
中使用正确的功能,例如,使其与 egui 0.28 一起工作
egui_struct = { version = "0.4", default-features = false, features = [ "egui28" ] }
或者使用 [patch]
部分。
默认 egui 版本功能将在 semver 次要版本发布(0.5)时更新到最新的 egui。
待办事项
- 优雅的错误/无效输入处理和有用的消息(宏)
- 添加界限
- 测试
- 代码清理和简化
- 支持向 Vec&Hashmap 添加/删除元素
- (需要专用化) EguiStructEq/EguiStructClone 默认实现
依赖关系
~6–11MB
~114K SLoC