4 个版本
0.1.3 | 2024 年 5 月 31 日 |
---|---|
0.1.2 | 2024 年 5 月 31 日 |
0.1.1 | 2024 年 5 月 31 日 |
0.1.0 | 2024 年 5 月 31 日 |
#641 在 GUI
每月 39 次下载
35KB
egui_xml
egui_xml
是一个强大的 Rust crate,旨在通过提供一个方便的宏从 XML 文件加载用户界面布局来增强 egui
库。这个 crate 通过允许开发者以结构化和可读的 XML 格式定义复杂布局,简化了 UI 开发过程。
主要功能
- 基于 XML 的布局定义:以清晰和结构化的 XML 格式定义您的 UI 布局,使其更容易可视化和管理复杂界面。
- 动态值插入:使用简单的语法无缝地将动态值和条件插入到您的 XML 布局中。
- 使用来自
egui_extras
的 StripBuilder:利用自定义面板和条带有效地组织您的 UI 元素,支持相对、精确、初始和剩余尺寸。 - load_layout_file 宏:从文件加载布局
示例用法
以下是一个示例,展示如何使用 egui_xml
crate 定义 UI 布局
use eframe::egui;
use egui::{Rounding, Ui};
use egui_xml::load_layout;
fn main() -> Result<(), eframe::Error> {
let options = eframe::NativeOptions {
..Default::default()
};
eframe::run_native(
"My egui App",
options,
Box::new(|_cc| Box::<MyApp>::new(MyApp)),
)
}
struct MyApp;
fn color_background(ui: &mut Ui, color: egui::Color32) {
ui.painter()
.rect_filled(ui.available_rect_before_wrap(), Rounding::same(5.0), color);
}
impl eframe::App for MyApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
load_layout!(
<Strip direction="west">
<Panel size="relative" value="0.3">
color_background(ui, egui::Color32::from_rgb(0, 0, 255));
</Panel>
<Panel size="remainder">
<Strip direction="north">
<Panel size="relative" value="0.3">
color_background(ui, egui::Color32::from_rgb(0, 255, 255));
</Panel>
<Panel size="remainder">
color_background(ui, egui::Color32::from_rgb(255, 0, 255));
</Panel>
</Strip>
</Panel>
</Strip>
);
});
}
}
展开
use eframe::egui;
use egui::{Rounding, Ui};
use egui_xml::load_layout;
fn main() -> Result<(), eframe::Error> {
let options = eframe::NativeOptions {
..Default::default()
};
eframe::run_native("My egui App", options, Box::new(|_cc| Box::<MyApp>::new(MyApp)))
}
struct MyApp;
fn color_background(ui: &mut Ui, color: egui::Color32) {
ui.painter()
.rect_filled(ui.available_rect_before_wrap(), Rounding::same(5.0), color);
}
impl eframe::App for MyApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default()
.show(
ctx,
|ui| {
let mut macro_strip_builder = egui_extras::StripBuilder::new(ui);
macro_strip_builder = macro_strip_builder
.size(egui_extras::Size::relative(0.3));
macro_strip_builder = macro_strip_builder
.size(egui_extras::Size::remainder());
let macro_strip_response = macro_strip_builder
.horizontal(|mut strip| {
strip
.cell(|ui| {
color_background(ui, egui::Color32::from_rgb(0, 0, 255));
});
strip
.cell(|ui| {
let mut macro_strip_builder = egui_extras::StripBuilder::new(
ui,
);
macro_strip_builder = macro_strip_builder
.size(egui_extras::Size::relative(0.3));
macro_strip_builder = macro_strip_builder
.size(egui_extras::Size::remainder());
let macro_strip_response = macro_strip_builder
.vertical(|mut strip| {
strip
.cell(|ui| {
color_background(ui, egui::Color32::from_rgb(0, 255, 255));
});
strip
.cell(|ui| {
color_background(ui, egui::Color32::from_rgb(255, 0, 255));
});
});
});
});
},
);
}
}
在这个示例中,load_layout! 宏接收一个创建 UI StripBuilder 代码的 XML 字符串。可以直接将动态值和条件注入到 XML 中,从而实现灵活和动态的 UI 创建过程。入门指南
要开始使用 egui_xml,将 crate 添加到您的 Cargo.toml
[dependencies]
egui_xml = "0.1"
egui = "0.27"
然后,您可以在 eframe 应用程序中使用 load_layout! 宏开始定义您的 UI 布局。
结论
egui_xml 是一个优秀的工具,可以帮助开发者有效地利用 XML 创建和管理 egui 用户界面。它动态处理值和条件的能力使其成为在 Rust 中构建丰富、响应式 UI 的多功能选择。
依赖关系
~7–12MB
~139K SLoC