egui 快速上手:从 0 到跑通第一个 Rust GUI 的完整指南

egui 快速上手:从 0 到跑通第一个 Rust GUI 的完整指南 egui 快速上手从 0 到跑通第一个 Rust GUI 的完整指南【免费下载链接】eguiegui: an easy-to-use immediate mode GUI in Rust that runs on both web and native项目地址: https://gitcode.com/GitHub_Trending/eg/eguiegui 是一个用 Rust 编写的即时模式Immediate ModeGUI 库即每帧重建整个界面的渲染方式解决写一套代码桌面和浏览器都能跑的问题。当前版本 0.36.1最小示例只要 33 行。一分钟看懂全貌egui 的定位是极简的跨平台 GUI核心egui负责布局和交互eframe负责窗口、输入和渲染入口同一套 UI 代码在桌面和 Web 通用。渲染后端可选 OpenGLglow或 WebGPUwgpu对你是透明的。对比维度egui即时模式传统 GUIQt、WinUI 等保留模式状态保存你只存业务数据每帧重绘整个 UI框架保存控件树数据与控件要手动双向同步写一个按钮ui.button(OK)一行实例化控件、设属性、绑信号跨平台桌面/浏览器共用一套 UI 代码通常逐平台移植学习成本先跑通示例再理解概念需先理解事件循环、信号槽等自定义绘制直接拿 Painter 画见 painter.rs多靠子类化或样式表跑起来的最短路径克隆仓库当前仓库版本 0.36.1git clone https://gitcode.com/GitHub_Trending/eg/egui仓库自带 示例目录最短的是hello_world_simple没有 struct逻辑全在 33 行里。直接运行cargo run -p hello_world_simple你会看到一个 320×240 的窗口一个输入框、一个滑块和一个按钮。核心代码长这样完整可运行版本在 hello_world_simple/src/main.rsuse eframe::egui; fn main() - eframe::Result { let options eframe::NativeOptions { viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 240.0]), ..Default::default() }; let mut age 42; eframe::run_ui_native(My egui App, options, move |ui, _frame| { egui::CentralPanel::default().show(ui, |ui| { ui.heading(My egui Application); ui.add(egui::Slider::new(mut age, 0..120).text(age)); if ui.button(Increment).clicked() { age 1; } ui.label(format!(age: {age})); }); }) }先搞懂这几个核心概念即时模式UI 不持久存在。每帧你调用一次ui闭包从上到下重新声明界面。好处是没有数据改了控件不刷新这类问题——数据变了下一帧自然画出来。eframe帮你管主循环窗口、事件循环、渲染全由 crates/eframe/ 接管你只写 UI 闭包。渲染后端在 native 目录 里按 glow 或 wgpu 自动选择。Response是交互的返回值ui.button(x)返回一个Response对它调.clicked()、.hovered()就知道用户做了什么。控件即函数这也是即时模式没有控件树的原因。两个典型场景看看实际效果场景一看全量组件长什么样。运行仓库自带的演示应用源码在 crates/egui_demo_lib/cargo run -p egui_demo_lib它会打开一个多窗口 Demo覆盖滑块、表格、弹窗、文本编辑等几乎所有组件每个窗口对应一段可对照的源码。场景二给游戏加设置面板。典型做法就是hello_world_simple的放大版结构体存游戏状态音量、分辨率等每帧在ui闭包里把状态映射成滑块和复选框用户拖动时直接改字段。不需要任何胶水代码因为状态本身就是唯一数据源。避坑清单现象中文显示成方框。→原因默认字体在 epaint_default_fonts/fonts 里只有拉丁字符。→解决往cc.egui_ctx的字体配置里加一个中文字体文件再set_fonts。现象按cargo run没有窗口弹出。→原因eframe的渲染依赖 OpenGL/WGPU裸终端环境可能缺驱动或后端。→解决确认桌面环境正常或用RUST_LOGdebug cargo run -p hello_world看报错。现象想加图片ui.image却加载不了。→原因egui核心不含图片解码器加载器在egui_extras。→解决调用egui_extras::install_image_loaders(cc.egui_ctx)hello_world示例里就有这一行。现象窗口大小和代码写的不一样。→原因with_inner_size是初始值用户可缩放。→解决需要固定大小时在ViewportBuilder上追加.with_resizable(false)。现象界面没变化时 CPU 占用高。→原因即时模式默认每帧重绘。→解决只在状态变化时调用ctx.request_repaint()空闲帧eframe会自行跳过。现象升级版本后编译报错。→原因egui 处于 0.xAPI 有破坏性变更本仓库示例用的就是最新的eframe::App::ui签名。→解决以仓库内当前示例为准别照抄旧教程代码。继续深入examples/20 多个独立小项目从hello_world到custom_3d_glow、multiple_viewports适合刚跑通后挨个试10 分钟一个。crates/egui_demo_lib/演示应用源码适合想学某个组件怎么组合出来的时对着读。crates/egui/src/核心源码containers/、widgets/目录结构与 UI 概念一一对应适合排查布局行为。docs/accessibility.md无障碍支持说明适合要给界面加读屏器支持时看。tests/egui_tests/带截图快照的回归测试适合想看官方怎么断言 UI 长相时参考。建议第一步就克隆仓库跑cargo run -p hello_world_simple窗口弹出来后再打开egui_demo_lib逛一圈。egui 的上手曲线就藏在这两个命令里。【免费下载链接】eguiegui: an easy-to-use immediate mode GUI in Rust that runs on both web and native项目地址: https://gitcode.com/GitHub_Trending/eg/egui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考