【egui】[特殊字符]简单、快速、跨平台的 Rust GUI 库

egui 是一个用 Rust 编写的即时模式 GUI 库 ,以其简单、快速、跨平台的设计理念,成为 Rust 生态中最受欢迎的 GUI 框架之一。

✨ 核心特性

特性 说明
⚡ 即时模式 每帧重新构建界面,无需维护繁重的状态树,大幅降低代码复杂度
🦀 纯 Rust 不依赖系统 GUI 框架,轻松集成到任何 Rust 项目中
🌐 跨平台 一次编写,处处运行:桌面(Windows/macOS/Linux)、Web(WASM)、移动端
🚀 高性能 基于 wgpu/OpenGL 渲染,轻松承载数千个 UI 元素而保持流畅
📚 易用性 直观的声明式 API,完善的文档和示例,上手极快

📖 名字的故事

egui 和 eframe 开头的 "e" 取自 easy(/ˈiːzi/ "意-zi"),承载着创作者的初心:

  • egui = easy GUI(/ˈiːɡwi/ "意-古意"):让 GUI 开发变得简单直观
  • eframe = easy framework(/ˈiːfreɪm/ "意-弗雷姆"):让 GUI 应用开发门槛降到最低

💡 "e" 的承诺:无论构建简单工具还是复杂应用,egui 和 eframe 都能让你轻松驾驭。

🏪 为什么只用 eframe,不用 egui?商品与商店的完美比喻

初看 Cargo.toml 只添加了 eframe 却没加 egui,可能会困惑。其实,这两者的关系就像便利店和商品:

角色对应关系

元素 比喻 实际职责
egui 货架上的商品 提供按钮、滑块、文本框、布局系统等所有 UI 组件
eframe 便利店本身 提供展示窗口、事件循环、跨平台运行环境等基础设施
你的应用 顾客/店主 通过商店(eframe)使用商品(egui)来展示和经营

🏪 eframe 便利店
走进店铺
使用
提供服务
🛠️ 店铺服务区
💰 收银台

事件处理
📋 店铺管理

窗口管理
⏰ 24h营业

事件循环
📦 egui 商品区
🎮 按钮/滑块
📐 布局系统
🤝 交互逻辑
👤 顾客/你的应用

🔍 为什么只需添加 eframe 依赖?

就像去便利店购物------你不需要自己建造货架、装修店铺,直接进店选购即可:

  • eframe 是"拎包入住"的完整解决方案 :它不仅依赖 egui,还通过 pub use egui; 重新导出了 egui 的所有功能

  • 一行代码,双重收获

    rust 复制代码
    use eframe::egui;  // 走进商店,随手拿起商品
    
    fn update(ctx: &egui::Context) {
        egui::Window::new("购物车 🛒").show(ctx, |ui| {
            ui.label("商品琳琅满目,尽情挑选吧!");
            if ui.button("结算").clicked() {
                println("购物愉快!");
            }
        });
    }

🎯 快速对比

维度 egui eframe
角色定位 GUI 核心库(提供 UI 组件) 应用框架(提供运行环境)
读音 /ˈiːɡwi/ "意-古意" /ˈiːfreɪm/ "意-弗雷姆"
依赖关系 eframe 依赖 egui eframe 重新导出 egui
使用方式 通过 eframe::egui 引入 直接配置并运行应用

🚀 快速开始

只需三步,就能运行你的第一个 egui 应用:

  1. 创建项目

    bash 复制代码
    cargo new my_egui_app
    cd my_egui_app
  2. 添加依赖(只需 eframe!)

    toml 复制代码
    [dependencies]
    eframe = "0.33.3"
  3. 编写代码

    rust 复制代码
    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("我的第一个 egui 应用 🎉");
                ui.label("欢迎来到简单又强大的 GUI 世界!");
            });
        }
    }
    
    fn main() -> Result<(), eframe::Error> {
        eframe::run_native(
            "Hello egui",
            eframe::NativeOptions::default(),
            Box::new(|_cc| Box::new(MyApp)),
        )
    }
  4. 运行

    bash 复制代码
    cargo run

就这样,你的第一个跨平台 GUI 应用诞生了!✨

相关推荐
Source.Liu1 天前
【rust-i18n】Cargo.toml 配置文件解析
rust
班公湖里洗过脚1 天前
Rust操作Josn数据及工作目录下多个应用程序维护示例
rust
Source.Liu1 天前
【rust-i18n】readme.md文件
rust·rust-i18n
锅包一切2 天前
在蓝桥杯边练边学Rust:2.原生类型
开发语言·学习·蓝桥杯·rust
@atweiwei2 天前
Rust 实现 LangChain
开发语言·算法·rust·langchain·llm·agent·rag
Hello.Reader2 天前
Tauri 开发环境 Prerequisites 桌面 + 移动端)
rust·tauri
Source.Liu2 天前
【rust-i18n】简介
rust·rust-i18n
鸿乃江边鸟2 天前
Spark Datafusion Comet 向量化Rust Native--Native算子ScanExec以及涉及到的Selection Vectors
大数据·rust·spark·arrow
Hello.Reader2 天前
Tauri 用“系统 WebView + 原生能力”构建更小更快的跨平台应用
rust·tauri