【egui】官方示例 hello_world 完全解析
这是 egui 最简单的入门示例展示了基本的 UI 控件Label、TextEdit、Slider、Button和图片显示。 文件结构hello_world/ ├── Cargo.toml # 项目依赖配置 ├── src/ │ └── main.rs # 主程序代码 └── screenshot.png # 运行截图 Cargo.toml 详解[package] name hello_world # 项目名称 version 0.1.0 # 版本号 authors [Emil Ernerfeldt emil.ernerfeldtgmail.com] # 作者egui 作者 license MIT OR Apache-2.0 # 双许可证 edition 2024 # Rust 2024 版次 rust-version 1.92 # 最低 Rust 版本要求 publish false # 不发布到 crates.io [lints] workspace true # 继承工作区的 lint 配置 [dependencies] # eframe 主依赖使用工作区配置启用 __screenshot 功能用于截图 eframe { workspace true, features [ default, __screenshot, # 可通过 EFRAME_SCREENSHOT_TO 环境变量输出截图 ] } # 图片支持扩展库 egui_extras { workspace true, features [default, image] } # 日志库支持彩色输出和时间戳 env_logger { workspace true, features [auto-color, humantime] }关键点解析依赖作用eframe应用框架提供窗口、事件循环和渲染eframe/__screenshot特殊功能运行时设置EFRAME_SCREENSHOT_TOpath.png可保存截图egui_extras扩展功能这里启用image功能加载图片env_logger日志输出通过RUST_LOGdebug控制日志级别 main.rs 逐行解析1. 文件头属性#![cfg_attr(not(debug_assertions), windows_subsystem windows)]#![expect(rustdoc::missing_crate_level_docs)]属性说明#![cfg_attr(not(debug_assertions), windows_subsystem windows)]发布模式--release下在 Windows 隐藏控制台窗口只显示 GUI 窗口#![expect(rustdoc::missing_crate_level_docs)]允许缺少 crate 级别文档因为是示例2. 引入依赖useeframe::egui;// 通过 eframe 重新导出使用 egui3. main 函数fnmain()-eframe::Result{// 初始化日志系统可以通过 RUST_LOGdebug 查看详细日志env_logger::init();// 配置窗口选项letoptionseframe::NativeOptions{// viewport 字段设置窗口大小 320x240viewport:egui::ViewportBuilder::default().with_inner_size([320.0,240.0]),..Default::default()// 其余使用默认值};// 运行应用eframe::run_native(My egui App,// 窗口标题options,// 窗口配置Box::new(|cc|{// 应用创建闭包// 安装图片加载器支持显示图片egui_extras::install_image_loaders(cc.egui_ctx);// 返回默认的 MyApp 实例Ok(Box::MyApp::default())}),)}4. 应用状态结构体structMyApp{name:String,// 姓名age:u32,// 年龄}implDefaultforMyApp{fndefault()-Self{Self{name:Arthur.to_owned(),// 默认姓名age:42,// 默认年龄}}}5. 实现 eframe::App traitimpleframe::AppforMyApp{// ui 方法每帧调用绘制界面fnui(mutself,ui:mutegui::Ui,_frame:muteframe::Frame){// 创建一个中央面板带背景和边距egui::CentralPanel::default().show_inside(ui,|ui|{// 大标题ui.heading(My egui Application);// 水平布局标签 文本框ui.horizontal(|ui|{letname_labelui.label(Your name: );ui.text_edit_singleline(mutself.name).labelled_by(name_label.id);// 关联标签辅助功能});// 滑块控件绑定 age范围 0-120ui.add(egui::Slider::new(mutself.age,0..120).text(age));// 按钮点击时 age1ifui.button(Increment).clicked(){self.age1;}// 显示当前值ui.label(format!(Hello {}, age {},self.name,self.age));// 显示图片使用 include_image! 宏在编译时嵌入图片ui.image(egui::include_image!(../../../crates/egui/assets/ferris.png// 路径相对于 hello_world 示例));});}} 界面控件详解1.Label标签ui.label(Your name: );ui.heading(My egui Application);// 大标题样式2.TextEdit文本编辑框ui.text_edit_singleline(mutself.name)// 绑定到 String.labelled_by(name_label.id);// 关联标签 ID3.Slider滑块egui::Slider::new(mutself.age,0..120)// 绑定到 u32范围 0-120.text(age)// 显示文本4.Button按钮ifui.button(Increment).clicked(){// 点击检测self.age1;}5.Image图片ui.image(egui::include_image!(path/to/image.png));// include_image! 宏在编译时嵌入图片无需运行时加载 关键概念理解即时模式Immediate Mode每帧都重新构建 UI状态保存在MyApp结构体中控件通过返回值如.clicked()响应用户操作布局系统CentralPanel占据剩余空间提供默认背景horizontal水平排列子控件嵌套布局CentralPanel包含horizontal数据绑定控件直接修改应用状态mut self.name、mut self.age无需手动更新 UI框架自动重绘图片处理egui_extras::install_image_loaders初始化图片支持include_image!宏在编译时嵌入图片适合小图片图片路径相对于当前文件 运行方式# 普通运行cargo run -p hello_world# 带日志调试运行RUST_LOGdebug cargo run -p hello_world# 生成截图需要 __screenshot 功能EFRAME_SCREENSHOT_TOscreenshot.png cargo run -p hello_world 运行效果界面包含标题 “My egui Application”“Your name:” 标签 文本输入框默认 “Arthur”年龄滑块0-120默认 42“Increment” 按钮点击年龄1显示 “Hello ‘姓名’, 年龄”Ferris 螃蟹图片 一句话总结hello_world 示例展示了 egui 最核心的编程模式状态存在结构体里ui 方法每帧重新构建界面控件直接读写状态布局通过嵌套 Panel 和 horizontal 实现。

相关新闻

基于LangChain搭建智能客服系统的架构设计与实战避坑指南

基于LangChain搭建智能客服系统的架构设计与实战避坑指南

最近在做一个智能客服项目,从零开始搭建,过程中踩了不少坑,也积累了一些心得。传统客服系统开发起来,有几个老生常谈但又很现实的痛点:一是冷启动成本太高,需要大量标注数据来训练意图识别模型;…

2026/7/5 4:21:08 阅读更多 →
Coqui TTS 实战:从零构建高效语音合成系统的避坑指南

Coqui TTS 实战:从零构建高效语音合成系统的避坑指南

最近在项目中用 Coqui TTS 搭建语音合成服务,踩了不少坑,也总结了一些提升效率的实战经验。从最初的模型加载慢、合成延迟高,到后来优化到吞吐量提升好几倍,这个过程值得记录一下。如果你也在用 TTS,希望这篇笔记能帮你…

2026/7/2 20:24:06 阅读更多 →
炸场实测!Qwen3.5-Plus硬刚GPT-5.2,开发者必看性能对比

炸场实测!Qwen3.5-Plus硬刚GPT-5.2,开发者必看性能对比

文章目录一、测试前的准备工作:把工具搭好再开测1.1 测试环境与公平性说明1.2 依赖安装与统一调用封装二、基础能力实测:文本生成与逻辑推理2.1 生活化文本生成2.2 逻辑推理测试三、开发者核心能力:代码生成与调试3.1 FastAPI接口生成3.2 代码…

2026/5/17 6:17:31 阅读更多 →

最新新闻

波峰焊虚焊问题分析与解决方案

波峰焊虚焊问题分析与解决方案

1. 波峰焊虚焊问题概述 虚焊是PCB波峰焊工艺中最常见的缺陷之一,它指的是焊料与被焊金属表面未能形成良好的冶金结合,导致电气连接不可靠或完全断开。这种现象在目检时往往难以发现,但在产品使用过程中会出现间歇性导通或完全开路&#xff0c…

2026/7/5 10:21:07 阅读更多 →
小型自动进给台钻设计与机械结构详解

小型自动进给台钻设计与机械结构详解

1. 小型自动进给台钻的设计背景与需求分析 在金属加工、木工制作和模型制作等领域,钻孔作业是最基础也最频繁的操作之一。传统手动台钻虽然结构简单,但在批量加工时存在效率低下、钻孔深度不一致等问题。自动进给机构的引入,能够显著提升加工…

2026/7/5 10:19:07 阅读更多 →
知识管理实战:从用户故事驱动KARL框架落地

知识管理实战:从用户故事驱动KARL框架落地

1. 项目概述:当知识管理不再只是IT部门的PPT工程我是Jim Glenn,在Six Feet Up担任KARL Champion——这个头衔听起来有点拗口,但它的实际含义很实在:我不是来写技术文档的,也不是来推动某个特定软件上线的,而…

2026/7/5 10:17:07 阅读更多 →
高速PCB信号完整性:眼图分析与工程实践

高速PCB信号完整性:眼图分析与工程实践

1. 高速PCB设计中的信号完整性挑战 在当今GHz级高速数字电路设计中,信号完整性问题已成为工程师面临的最大挑战之一。当信号速率超过5Gbps时,PCB走线上的传输线效应、阻抗不连续、串扰和抖动等问题会显著影响系统性能。我曾参与过一个25Gbps SerDes接口的…

2026/7/5 10:17:07 阅读更多 →
AI技能安全扫描实战:从威胁模型到CI/CD集成

AI技能安全扫描实战:从威胁模型到CI/CD集成

1. 项目概述:为什么AI技能也需要“安检门”?最近在折腾AI Agent和各类AI编程工具(比如Cursor、GitHub Copilot)时,我发现一个挺有意思的现象:大家热衷于分享和下载各种“技能”(Skills&#xff…

2026/7/5 10:17:07 阅读更多 →
3分钟解锁网易云音乐:NCM转MP3的完全免费解决方案

3分钟解锁网易云音乐:NCM转MP3的完全免费解决方案

3分钟解锁网易云音乐:NCM转MP3的完全免费解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的尴尬:在网易云音乐下载了心爱的歌曲,却只能在特定App里播放?车…

2026/7/5 10:15:07 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻