3 个版本
使用旧的 Rust 2015
0.1.3 | 2018年5月30日 |
---|---|
0.1.1 | 2018年1月30日 |
0.1.0 | 2018年1月30日 |
#848 在 GUI
172 每月下载量
在 3 个工具包中使用 (通过 iui)
1MB
35K SLoC
改进的用户界面
基于 libui 的跨平台 UI 工具包
iui
是一个简单、小巧、易于分发的 GUI 库,一个绑定到平台原生 API 的 Rust 用户界面库。这些是通过 ui-sys
绑定工具包对最小化本地 UI 库 [libui][libui] 的工作中版本绑定。
将 iui
添加到项目中
iui = "0.3"
组织
iui
是安全的 Rust 包装器,供大多数用户使用。ui
是安全包装器的旧版本。不要使用此版本。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
是您所希望的。但这确实需要一份 cmak,以及必要的构建工具等。