3 个版本 (重大更新)
使用旧Rust 2015
0.3.0 | 2018年6月5日 |
---|---|
0.2.0 | 2018年2月15日 |
0.1.0 | 2018年1月30日 |
#578 in GUI
173 每月下载量
在 2 crates 中使用
1.5MB
37K SLoC
改进的用户界面
基于libui的跨平台UI工具包,用于Rust
iui
是一个简单、小巧、易于分发的GUI库,是一个绑定到平台原生API的Rust用户界面库。这些是通过 ui-sys
绑定crate创建的到最小化原生日志UI库 [libui][libui] 的正在进行中的绑定。
使用以下方式将 iui
添加到您的项目中
iui = "0.3"
组织
此存储库包含多个Rust crate。还请查看我们的 变更日志 并了解 如何贡献。
iui
是安全的Rust包装器,大多数用户应使用。ui-sys
是到libui
C代码的原始不安全绑定。需要cmake
以构建libui
。libui
作为子模块包含在内。
基于 @pcwalton 的工作。MIT许可。
示例
extern crate iui;
use iui::prelude::*;
use iui::controls::{Label, Button, VerticalBox, Group};
fn main() {
// Initialize the UI library
let ui = UI::init().expect("Couldn't initialize UI library");
// Create a window into which controls can be placed
let mut win = Window::new(&ui, "Test App", 200, 200, WindowType::NoMenubar);
// Create a vertical layout to hold the controls
let mut vbox = VerticalBox::new(&ui);
vbox.set_padded(&ui, true);
let mut group_vbox = VerticalBox::new(&ui);
let mut group = Group::new(&ui, "Group");
// Create two buttons to place in the window
let mut button = Button::new(&ui, "Button");
button.on_clicked(&ui, {
let ui = ui.clone();
move |btn| {
btn.set_text(&ui, "Clicked!");
}
});
let mut quit_button = Button::new(&ui, "Quit");
quit_button.on_clicked(&ui, {
let ui = ui.clone();
move |_| {
ui.quit();
}
});
// Create a new label. Note that labels don't auto-wrap!
let mut label_text = String::new();
label_text.push_str("There is a ton of text in this label.\n");
label_text.push_str("Pretty much every unicode character is supported.\n");
label_text.push_str("🎉 用户界面 사용자 인터페이스");
let label = Label::new(&ui, &label_text);
vbox.append(&ui, label, LayoutStrategy::Stretchy);
group_vbox.append(&ui, button, LayoutStrategy::Compact);
group_vbox.append(&ui, quit_button, LayoutStrategy::Compact);
group.set_child(&ui, group_vbox);
vbox.append(&ui, group, LayoutStrategy::Compact);
// Actually put the button in the window
win.set_child(&ui, vbox);
// Show the window
win.show(&ui);
// Run the application
ui.main();
}
构建 ui-sys
ui-sys
包含 libui
作为子模块,并允许它通过默认功能 fetch
和 build
在线构建。禁用 fetch
时,它将简单地构建现有源代码而不会更新它们,禁用 build
时,它将不会构建任何内容,假设有系统或本地(在 ./lib/
)版本的 libui
可用。
请注意,大多数情况下,动态构建 libui
是您所需要的。但这确实需要一份 cmake、必要的构建工具等。