3 个版本 (重大更新)

使用旧Rust 2015

0.3.0 2018年6月5日
0.2.0 2018年2月15日
0.1.0 2018年1月30日

#578 in GUI

Download history 62/week @ 2024-03-11 53/week @ 2024-03-18 64/week @ 2024-03-25 96/week @ 2024-04-01 40/week @ 2024-04-08 48/week @ 2024-04-15 56/week @ 2024-04-22 48/week @ 2024-04-29 45/week @ 2024-05-06 54/week @ 2024-05-13 56/week @ 2024-05-20 44/week @ 2024-05-27 51/week @ 2024-06-03 30/week @ 2024-06-10 43/week @ 2024-06-17 45/week @ 2024-06-24

173 每月下载量
2 crates 中使用

MIT 许可证

1.5MB
37K SLoC

C 14K SLoC // 0.1% comments C++ 10K SLoC // 0.1% comments Objective-C 9K SLoC // 0.1% comments Rust 3.5K SLoC // 0.1% comments Go 136 SLoC Swift 67 SLoC GNU Style Assembly 44 SLoC Shell 17 SLoC // 0.1% comments Batch 7 SLoC

改进的用户界面

基于libui的跨平台UI工具包,用于Rust

libui-rs travis build status libui-rs appveyor build status badge actively developed badge

iui: iui crates.io 版本徽章 docs.rs for iui ui-sys: ui-sys crates.io 版本徽章 docs.rs for ui-sys

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许可。

示例

Three example GUI applications running on Linux

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 作为子模块,并允许它通过默认功能 fetchbuild 在线构建。禁用 fetch 时,它将简单地构建现有源代码而不会更新它们,禁用 build 时,它将不会构建任何内容,假设有系统或本地(在 ./lib/)版本的 libui 可用。

请注意,大多数情况下,动态构建 libui 是您所需要的。但这确实需要一份 cmake、必要的构建工具等。

依赖项