【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 应用诞生了!✨

相关推荐
小杍随笔21 小时前
【Rust 1.94.0 正式发布:数组窗口、Cargo 配置模块化、TOML 1.1 全面升级|开发者必看】
开发语言·后端·rust
敬业小码哥2 天前
记一次:clion使用rust插件配置环境并开发
学习·rust
NGINX开源社区2 天前
NGINX 引入对 ACME 协议的原生支持
nginx·rust
Rust语言中文社区2 天前
【Rust日报】 CEL与Rust实现接近原生速度的解释执行
开发语言·后端·rust
FreeBuf_2 天前
恶意Rust组件与AI机器人利用CI/CD管道窃取开发者密钥
人工智能·ci/cd·rust
水月wwww2 天前
Rust的安装与卸载 | windows
开发语言·windows·rust
Mem0rin3 天前
[自用]Rust速通day5:包、crate和use
rust
Ivanqhz3 天前
活跃范围重写(Live Range Rewriting)
开发语言·c++·后端·算法·rust
Roc.Chang3 天前
Rust 入门 - RustRover 新建项目时四种项目模板对比
开发语言·后端·rust
勇敢牛牛_3 天前
【conreg-client】在Rust中使用向Feign一样的远程调用
网络·rust·feign