Rust有哪些好用的UI库

最近在学习Rust语言,想开发一个带图形界面的应用程序,但不太清楚Rust生态中有哪些成熟的UI库可用。听说Rust在GUI方面还在发展中,不知道现在有哪些比较稳定好用的选择?希望了解:

  1. 目前主流的Rust UI库有哪些?
  2. 这些库的跨平台支持如何(Windows/macOS/Linux)?
  3. 是否支持移动端(Android/iOS)?
  4. 学习曲线和文档完善程度如何?
  5. 是否有实际生产项目在使用这些库?求推荐适合新手的方案。
2 回复

Rust的UI生态还在发展中,推荐几个主流选择:

  • egui:轻量级即时模式GUI,适合工具类应用
  • Iced:受Elm启发的跨平台GUI,有现代API设计
  • Druid:数据导向的GUI框架,功能较完善
  • Slint:商业友好的声明式UI框架
  • Tauri:可搭配Web前端技术,适合桌面应用开发

建议根据项目需求选择,新手可从egui或Iced开始尝试。


Rust 的 UI 生态仍在发展中,以下是几个主流且实用的 UI 库:

1. Druid

  • 特点:专注于桌面应用,设计简洁,性能优秀,支持跨平台(Windows、macOS、Linux)。
  • 适用场景:传统桌面应用开发。
  • 示例代码
    use druid::{AppLauncher, WindowDesc, Widget, PlatformError};
    use druid::widget::Label;
    
    fn build_ui() -> impl Widget<()> {
        Label::new("Hello Druid!")
    }
    
    fn main() -> Result<(), PlatformError> {
        let main_window = WindowDesc::new(build_ui())
            .title("Druid Example");
        AppLauncher::with_window(main_window)
            .launch(())?;
        Ok(())
    }
    

2. Iced

  • 特点:跨平台(桌面、Web),基于 Elm 架构,简单易用,内置组件丰富。
  • 适用场景:桌面和 Web 应用。
  • 示例代码
    use iced::{Element, Sandbox, Settings, Text};
    
    struct MyApp;
    
    impl Sandbox for MyApp {
        type Message = ();
    
        fn new() -> Self { MyApp }
    
        fn title(&self) -> String { String::from("Iced Example") }
    
        fn update(&mut self, _message: Self::Message) {}
    
        fn view(&mut self) -> Element<Self::Message> {
            Text::new("Hello Iced!").into()
        }
    }
    
    fn main() -> iced::Result {
        MyApp::run(Settings::default())
    }
    

3. egui

  • 特点:即时模式 GUI,轻量级,适合集成到游戏或工具中,支持 WebAssembly。
  • 适用场景:嵌入式 UI、游戏界面、简单工具。
  • 示例代码
    use eframe::egui;
    
    struct MyApp;
    
    impl eframe::App for MyApp {
        fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
            egui::CentralPanel::default().show(ctx, |ui| {
                ui.heading("Hello egui!");
            });
        }
    }
    
    fn main() -> Result<(), eframe::Error> {
        let options = eframe::NativeOptions::default();
        eframe::run_native("egui Example", options, Box::new(|_| Box::new(MyApp)))
    }
    

4. Slint(原名 SixtyFPS)

  • 特点:声明式 UI,支持多平台(桌面、嵌入式、微控制器),设计工具友好。
  • 适用场景:跨平台应用,尤其是资源受限环境。
  • 示例代码(Slint DSL):
    MainWindow := Window {
        Text {
            text: "Hello Slint!";
        }
    }
    
    Rust 集成:
    slint::include_modules!();
    fn main() {
        let app = MainWindow::new();
        app.run();
    }
    

5. GTK-RS

  • 特点:Rust 绑定的 GTK 库,功能全面,适合复杂桌面应用。
  • 适用场景:需要成熟桌面框架的项目。
  • 示例代码
    use gtk::prelude::*;
    use gtk::{Application, ApplicationWindow, Label};
    
    fn main() {
        let app = Application::new(Some("com.example.gtk"), Default::default());
        app.connect_activate(|app| {
            let window = ApplicationWindow::new(app);
            window.set_title("GTK-RS Example");
            window.set_default_size(350, 70);
    
            let label = Label::new(Some("Hello GTK!"));
            window.add(&label);
            window.show_all();
        });
        app.run();
    }
    

选择建议:

  • 快速原型:尝试 Iced 或 egui。
  • 生产级桌面应用:Druid 或 GTK-RS。
  • 跨平台兼容性:Slint 或 Iced。
  • 游戏或工具集成:egui。

这些库各有优势,建议根据项目需求测试后选择。

回到顶部