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

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.xdnf.cn/news/18207.html

相关文章:

  • Qt设置软件使用期限【新版防修改系统时间】
  • React响应式链路
  • 【蒸蒸日上】专栏前言
  • Google Chrome v139.0.7258.139 便携增强版
  • 云手机在社交媒体场景中的优势体现在哪些方面?
  • 趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!
  • AutoGLM2.0背后的云手机和虚拟机分析(非使用案例)
  • Claude Code NPM 包发布命令
  • 数据挖掘笔记:点到线段的距离计算
  • GitHub宕机生存指南:从应急协作到高可用架构设计
  • [TryHackMe]Mr Robot CTF(hydra爆破+Wordpress更改主题)
  • Leetcode 深度优先搜索 (9)
  • MPR多平面重建一:初步实现
  • linux报permission denied问题
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • 创建Vue项目的不同方式及项目规范化配置
  • 大数据常见问题分析与解决方案
  • 《SQLAlchemy 2 In Practice》读后感
  • C++开发/Qt开发:单例模式介绍与应用
  • IDEA:控制台中文乱码
  • Redis知识总结
  • 【机器学习深度学习】Ollama、vLLM、LMDeploy对比:选择适合你的 LLM 推理框架
  • MySQL高阶篇-数据库优化
  • 计算机网络模型
  • 企业通讯软件保证内部通讯安全,搭建数字安全体系
  • 建筑行业变革:用Three.js构建BIM数据可视化孪生平台
  • 代码管理平台Gitlab如何通过 ZeroNews 实现远程访问?
  • AI时代SEO关键词优化新策略
  • Redis-缓存-雪崩-持久化、集群、灾备
  • 大数据毕业设计选题推荐-基于Hadoop的电信客服数据处理与分析系统-Spark-HDFS-Pandas