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 的所有功能 -
一行代码,双重收获 :
rustuse 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 应用:
-
创建项目
bashcargo new my_egui_app cd my_egui_app -
添加依赖(只需 eframe!)
toml[dependencies] eframe = "0.33.3" -
编写代码
rustuse 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)), ) } -
运行
bashcargo run
就这样,你的第一个跨平台 GUI 应用诞生了!✨