Rust图形界面egui初步

文章目录

    • 下载和演示
    • 配置文件
    • 源代码

下载和演示

首先下载其源代码egui,然后进入其example文件夹,进入之后,使用cargo命令进行编译

cargo run --release -p hello_world

rust会自动下载一些相关的包和库,编译运行后,结果如下

在这里插入图片描述

同时根目录下会出现一个Target文件夹,占据了400多兆的硬盘空间,这里记录了cargo编译的过程,并且最后得到的可执行文件也在其中。但这个可执行文件hello_world.exe的尺寸控制的还可以,只有不到6M。

hello_world是egui中最简单的示例,其文件结构也非常简单,只有一个配置文件和一个main源代码,目录层级如下

  • src
    • main.rs
  • Cargo.toml

下面分别对这两个文件进行简要的介绍。

配置文件

Cargo.toml的文件内容如下,前面诸如名字、版本等信息无关紧要,但后面的依赖项需要注意,给定了eframe的位置。

[package]
name = "hello_world"
version = "0.1.0"
authors = ["Emil Ernerfeldt <emil.ernerfeldt@gmail.com>"]
license = "MIT OR Apache-2.0"
edition = "2021"
rust-version = "1.70"
publish = false[dependencies]
eframe = { path = "../../crates/eframe", features = ["__screenshot", # __screenshot is so we can dump a screenshot using EFRAME_SCREENSHOT_TO
] }
env_logger = "0.10"

源代码

首先,源代码第一行用于隐藏Window命令行,然后调用eframe中的egui库。

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use eframe::egui;

接下来就是main函数,内容如下,首先设置一个参数变量,里面包含了窗口的初始尺寸;然后执行run_native,即开启窗口,里面有三个参数,分别是窗口名称、刚刚创建的参数文件,以及最重要的,一个新建的App窗口。

fn main() -> Result<(), eframe::Error> {env_logger::init(); let options = eframe::NativeOptions {initial_window_size: Some(egui::vec2(320.0, 240.0)),..Default::default()};eframe::run_native("My egui App",options,Box::new(|_cc| Box::<MyApp>::default()),)
}

在main函数中,用到了Box::<MyApp>,其中MyApp是一个自定义的结构体,内容如下,其中主要有两个变量,分别是字符串类型的name和整型的age。

然后为其绑定Default方法,给出了默认姓名和年龄,这两步显然没什么好说的。

struct MyApp {name: String,age: u32,
}impl Default for MyApp {fn default() -> Self {Self {name: "Arthur".to_owned(),age: 42,}}
}

接下来则是关键内容,为MyApp绑定了eframe中的方法。

impl eframe::App for MyApp {fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {egui::CentralPanel::default().show(ctx, |ui| {ui.heading("My egui Application");ui.horizontal(|ui| {let name_label = ui.label("Your name: ");ui.text_edit_singleline(&mut self.name).labelled_by(name_label.id);});ui.add(egui::Slider::new(&mut self.age, 0..=120).text("age"));if ui.button("Click each year").clicked() {self.age += 1;}ui.label(format!("Hello '{}', age {}", self.name, self.age));});}
}

下面逐条拆解,首先ui.heading用于标识窗口名。

ui.horizontal是一个水平的布局框,其内部的元素横向布置。在上述代码中,里面摆放了一个写着Your name的label标签,以及一个可编辑的文本框。

接下来,添加一个滚动条,滚动条的范围是0到120,滚动条的标记是age。

最后两行,一个按钮,一个标签。当按钮被点击时,self.age加一,相应地绑定self.age的控件也会跟着发生变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169076.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端模型部署框架

移动端模型部署框架 1. MNN整体特点轻量性通用性高性能易用性架构设计主体工具致谢移动端模型部署框架 1. MNN https://www.yuque.com/mnn/cn/about MNN是全平台轻量级高性能深度学习引擎,广泛支持了阿里巴巴在计算机视觉、语音识别技术、自然语言处理等领域的70多个AI应用…

快速修复因相机断电导致视频文件打不开的问题

3-5 本文主要解决因相机突然断电导致拍摄的视频文件打不开的问题。 在日常工作中&#xff0c;有时候需要使用相机拍摄视频&#xff0c;比如现在有不少短视频拍摄的需求&#xff0c;如果因电池突然断电的原因&#xff0c;导致拍出来的视频播放不了&#xff0c;这时候就容易出大…

CHM Viewer Star 6.3.2(CHM文件阅读)

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件&#xff0c;支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计&#xff0c;支持多种浏览模式&#xff0c;如书籍模式、缩略图模式和文本模式等&#xff0c;并提供了丰富的功能和工具&#xff0c;如…

亲身体验告诉你:亚马逊云科技海外服务器是否值得一试?

前言 在当今数字化时代&#xff0c;云计算已经成为企业和个人发展的重要支撑。亚马逊云科技作为全球领先的云计算服务提供商&#xff0c;其海外服务器备受瞩目。然而&#xff0c;对于一些用户来说&#xff0c;是否值得一试亚马逊云科技的海外服务器仍然是一个疑问。本文将通过亲…

电脑小Tip---外接键盘F1-F12快捷键与笔记本不同步

当笔记本外接一款非常好用的静音键盘后&#xff0c;会出现一些问题。例如&#xff1a;外接键盘F1-F12与笔记本不同步。具体一个例子就是&#xff0c;在运行matlab程序时&#xff0c;需要点编辑器—运行&#xff0c;这样就很麻烦&#xff0c;直接运行的快捷键是笔记本键盘上的F5…

Llama2通过llama.cpp模型量化 WindowsLinux本地部署

Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA&#xff0c;它是一组基础语言模型&#xff0c;参数范围从7B到65B。在数万亿的tokens上训练的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需求…

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时&#xff0c;对图像数据执行的预处理步骤。 首先&#xff0c;让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时&#xff0c;您需要选择那些在训练强大且准确的模型方面提供最大价值的图…

MySQL数据库实验记录

输入密码 显示数据库 mysql命令以分号;结束 创建数据库 建表 写错了就会报错 没选数据库也会报错

数据分析实战 | 逻辑回归——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/d…

js删除json数据中指定元素

delete 删除数组方法&#xff1a; function removeJSONRows() {var tab {"dataRows": [{"id": 1,"name": "使用部门"},{"id": 2,"name": "车辆走行路线"},{"id": 3,"name": &quo…

【文章阅读】Transfer learning for drug–target interaction prediction

Bioinformatics , 2023 Transfer learning for drug–target interaction prediction 本文主要是对迁移学习所使用的三种模式进行学习 &#xff0c;本文没有什么很值得细读的&#xff0c;只是介绍了三种迁移学习的方式罢了 深度迁移学习是将迁移学习应用于深度神经网络。深度迁…

索尼RSV文件怎么恢复为MP4视频

索尼相机RSV是什么文件&#xff1f; 如果您的相机是索尼SONY A7S3&#xff0c;A7M4&#xff0c;FX3&#xff0c;FX3&#xff0c;FX6&#xff0c;或FX9等&#xff0c;有时录像会产生一个RSV文件&#xff0c;而没有MP4视频文件。RSV其实是MP4的前期文件&#xff0c;经我对RSV文件…