Rust图形界面egui初步

编程入门 行业动态 更新时间:2024-10-26 12:25:04

Rust<a href=https://www.elefans.com/category/jswz/34/1768607.html style=图形界面egui初步"/>

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>"]
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的控件也会跟着发生变化。

更多推荐

Rust图形界面egui初步

本文发布于:2023-11-15 06:28:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595265.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图形界面   Rust   egui

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!