当前位置: 首页 > news >正文

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(一)基本代码

Cargo.toml

[dependencies]
eframe = "0.32.1"
egui = "0.32.1"

‌启动函数一:run_simple_native

  • 简化版入口函数,适用于快速原型开发
  • 仅需提供应用标题和 UI 渲染闭包即可运行
  • 典型使用场景:单面板工具、简单演示程序
// 导入egui核心库和eframe框架(eframe是egui的本地窗口封装)
use eframe::egui;// 主函数返回Result类型以处理可能的错误
fn main() -> eframe::Result<()> {// 配置原生窗口参数let options = eframe::NativeOptions::default();eframe::run_simple_native("My egui App", options, move |ctx, _frame| {egui::CentralPanel::default().show(ctx, |ui| {ui.heading("Hello from egui 0.32.1!");           // 添加一级标题ui.label("This is a simple window in Ubuntu.");  // 添加普通文本标签});})
}

启动函数二:‌run_native

  • 完整功能入口,支持自定义应用生命周期管理
  • 需要实现eframe::App trait的结构体
  • 典型使用场景:复杂应用、需要持久化状态的项目
// 导入egui核心库和eframe框架(eframe是egui的本地窗口封装)
use eframe::egui;// 主函数返回Result类型以处理可能的错误
fn main() -> Result<(), eframe::Error> {let options = eframe::NativeOptions {   // 配置窗口的初始参数// 设置窗口初始大小为400x300像素viewport: egui::ViewportBuilder::default().with_inner_size([400.0, 300.0]),..Default::default()                // 其他参数保持默认值};// 启动原生窗口应用eframe::run_native("My egui App",                                // 窗口标题options,                                      // 传入配置选项Box::new(|_cc| Ok(Box::<MyApp>::default())),  // 创建应用实例的闭包,_cc包含创建上下文信息)
}// 定义应用的主要结构体
struct MyApp{}// 为MyApp实现Default trait以提供默认初始化
impl Default for MyApp {fn default() -> Self {Self                // 返回空结构体实例}
}// 为MyApp实现eframe::App trait定义应用行为
impl eframe::App for MyApp {// 每帧调用的更新函数fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {egui::CentralPanel::default().show(ctx, |ui| {       // 创建中央面板(egui的主要布局组件)ui.heading("Hello from egui 0.32.1!");           // 添加一级标题ui.label("This is a simple window in Ubuntu.");  // 添加普通文本标签});}
}

选择建议

  1. 优先选择run_simple_native当:

    • 开发临时性工具
    • 无需复杂状态管理
    • 快速验证UI设计
  2. 必须使用run_native当:

    • 需要保存用户配置
    • 实现多窗口交互
    • 处理文件I/O等系统操作

两者底层均基于相同的egui渲染引擎,性能差异可以忽略。对于WebAssembly目标,对应存在run_simple_webrun_web变体。

http://www.dtcms.com/a/341377.html

相关文章:

  • python的校园顺路代送系统
  • Seaweed-APT:AI视频生成模型,单步生成2秒钟的1280x720 24fps视频
  • 46.安卓逆向2-补环境-使用unidbg(使用apk文件补环境)
  • 面试记录5 .net
  • 电商大数据的采集过程详解​【采集内容|采集渠道|采集步骤|注意事项】
  • 算法第34天|动态规划:打家劫舍Ⅰ、打家劫舍Ⅱ、打家劫舍Ⅲ
  • 为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
  • (双类别检测:电动车 + 头部,再对头部分类)VS 单类别检测 + ROI 分类器 方案
  • 小迪安全v2023学习笔记(六十七讲)—— Java安全JNDI注入五大不安全组件RCE不出网
  • 2025年中高级后端开发Java岗八股文最新开源
  • 利用 PHP 爬虫获取店铺所有商品实战指南
  • Spring Boot 3.4.x 性能优化实战:用 Undertow 替换 Tomcat 全指南​
  • 自动驾驶汽车机器学习安全实用解决方案
  • 三坐标性能的创新重构,“高精度、紧凑型、高稳定性”三位一体
  • 鸿蒙中Profiler的使用
  • STM32学习笔记16-SPI硬件控制
  • MySQL 语法基础入门:从零开始掌握数据库操作
  • CoreShop微信小程序商城框架开启多租户-添加一个WPF客户端以便进行本地操作(5)
  • 读《精益数据分析》:规模化(Scale)—— 复制成功,进军新市场
  • VMware Workstation | 安装Ubuntu18.04.5
  • 波纹干涩 shader
  • 零知开源——基于STM32F103RBT6与ADXL362三轴加速度计的体感迷宫游戏设计与实现
  • 【Unity3D优化】平衡 Hide 与 Destroy:基于性能等级与 LRU 的 UI 管理策略与实践思考
  • PostgreSQL Certified Master 专访 | 第四期 贾桂军
  • 【Techlog】01入门-井筒数据整合软件的基本认识
  • 控制器调用服务层出现Cannot invoke ... 显示服务层bean对象为null
  • PostgreSQL 流程---更新
  • 编程语言学习
  • 环境搭建:centos7+docker+Oracle
  • 【datawhale组队学习】RAG技术 - TASK02