<Rust>egui学习之小部件(三):如何为窗口UI元件设置布局(间隔、水平、垂直排列)?

news2024/9/20 20:49:50

前言
本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。

环境配置
系统:windows
平台:visual studio code
语言:rust
库:egui、eframe

概述
本文是本专栏的第三篇博文,主要说明如何对窗口的部件进行布局。

事实上,类似于iced,egui都提供了示例程序,本专栏的博文都是建立在官方示例程序以及源代码的基础上,进行的实例讲解。
即,本专栏的文章并非只是简单的翻译egui的官方示例与文档,而是针对于官方代码进行的实际使用,会在官方的代码上进行修改,包括解决一些问题。

系列博文链接:
1、<Rust>egui学习之小部件(一):如何在窗口及部件显示中文字符?
2、<Rust>egui学习之小部件(二):如何在egui窗口中添加按钮button以及标签label部件?

部件属性
设置间隔

我们已经知道了如何在窗口布置按钮、标签,但是我们想要按钮和标签在窗口的呈现是有设计的,比如它们之间有间隔,且可以水平或者垂直布局,如何实现呢?
egui提供了sapcing以及horizontal、vertical三种属性,我们一一来看一下。
首先我们添加几个按钮以及标签,但是没有任何布局,看一下窗口显示:
在这里插入图片描述
可以看到,默认情况的布局,这些部件都是垂直分布且挤在一起的。
现在,我们先让这些部件之间有一些间隙,使其看起来不那么局促:

ui.spacing_mut().item_spacing = egui::vec2(10.0, 30.0);

在这里插入图片描述
是不是一下子就清爽了不少,接着,我们为按钮设置布局,我们将按钮2和按钮3放在同一行:

ui.horizontal(|ui|{
                let btn_res2=ui.button("按钮2");
                if btn_res2.clicked(){ 
                    //println!("按钮2点击")
                    self.lbltext="按钮2点击".to_string();
                }
                let btn_res3=ui.button("按钮3");
                if btn_res3.clicked(){ 
                    //println!("按钮3点击")
                    self.lbltext="按钮3点击".to_string();
                }
            });

在这里插入图片描述
接下来,我们将文本1、文本2与上面的文本放到同一行,且文本1、文本2本身垂直分布:

ui.horizontal(|ui|{
                ui.label(format!("{}",self.lbltext));
                ui.vertical(|ui|{
                    ui.label("文本1");
                    ui.label("文本2");
                });
            
            });

在这里插入图片描述
我们可以看到,里面的布局是可以嵌套的。
那么,如果想要让horizontal或者vertical内部的部件之间的间隙改变的话,如何设置呢?
其实是一样,只要在其内部,添加spacing_mut即可:

  ui.horizontal(|ui|{
                ui.spacing_mut().item_spacing = egui::vec2(30.0, 60.0);
                ui.label(format!("{}",self.lbltext));
                ui.vertical(|ui|{
                    ui.label("文本1");
                    ui.label("文本2");
                });
            
            });

看一下实际显示:
在这里插入图片描述
当然,如果你说,我现在不想整体设置间隙,只是想在某个布局内部,设置某两个部件间的单独的间隙,如何设置呢?
可以使用add_space参数:

 ui.vertical(|ui|{
                    ui.label("文本1");
                    ui.add_space(30.0);
                    ui.label("文本2");
                });

如上面的代码,将在这个垂直布局的两个文本之间,单独添加一个空间,值为30。

所以,我们可以结合spacing、horizontal以及vertical这三个属性,来调整布局,达到想要的效果。然后使用add_space这种来微调,当然,这种调整UI布局的方式,在涉及大量部件的时候,其实是不太方便的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TWRP 使用帮助 第三方Recovery

简介 TWRP 是国外安卓爱好者开发的一款工具全称为:Team Win Recovery Project。是一个由Omnirom开源团队中的Dees Troy主导开发,旨在打造最完美第三方recovery的开源项目。目前主要由包括Dees Troy在内的4个人共同维护。 主要作用包括刷机、备份、救砖 …

C++判断语句(基础速通)ac-wing

倍数 #include <iostream> using namespace std; int a, b; int main() {cin >> a >> b;if (a % b 0 || b % a 0) cout << "Sao Multiplos";else cout << "Nao sao Multiplos";return 0; }零食 #include <iostream>…

通用后台管理系统实战演示(Vue3 + element-plus)汇总篇一

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

菜鸟笔记-001 如何用JavaScript脚本在文字中实现向左或向右插入空格

这是一个网友在线上问我的一个问题&#xff1a; 如何用JavaScript脚本在文字中实现向左或向右插入空格 下图是在文字左边插入了1/2个空格的效果&#xff1a; 那么如何用javascript 实现向左向右插入空格&#xff1f; 其实这个功能&#xff0c;我在实际工作确实很少碰到&#xf…

【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN&#xff08;多层RNN&#xff09; 1. 原理 多个全连接层可以堆叠&#xff0c;多个卷积层也可以堆叠。同理&#xff1a;RNN也可以堆叠形成多层RNN。 如下图所示&#xff1a;对于每一个时刻的输出 h t h_t ht​&#xff0c;它既会作为下一个时刻的输入&#xff0c;…

【C++ 第十八章】C++11 新增语法(1)

1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

2016年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(10 分) 【问题 2】(6 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Scrum 敏捷开发过程的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 Scrum 是一个增量…

C语言典型例题57

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.9 判断整数是否为素数 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.9 判断整数是否为素数//【数学知识】素数&#xff1a;一个大于1的自然数&#xff0c;如果只…

我从obsidian 转入 语雀 了

遇到的问题倒是不多&#xff0c;这里记录一下&#xff1a; 1. wiki链接转markdown 用vscode打开ob工作区文件夹&#xff0c;利用正则表达式&#xff0c;替换链接 \[\[(.*?)\]\][$1](../_resources/$1) 我的图片都存在_resources文件夹里 其中ob的json&#xff0c;还有插件的…

JavaEE:多线程代码案例(定时器)

文章目录 定时器介绍Java标准库中的定时器定时器的实现 定时器 介绍 除了之前说过的单例模式,阻塞队列,线程池以外,定时器也是我们日常开发中常用的代码~ 定时器相当于"闹钟".在现实生活中,当闹钟响时,我们就需要去完成一些事情. 同理,在代码中,也经常需要"闹…

力扣406-根据身高重建队列(java详细题解)

题目链接&#xff1a;406. 根据身高重建队列 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&…

【自用16.】C++类

类的构成 类的设计 代码demo #include <iostream> #include <Windows.h> #include <string>using namespace std;// 定义一个“人类” class Human { public: //公有的&#xff0c;对外的void eat(); //方法&#xff0c; “成员函数”void sleep();void …

从零开始搭建本地安全 AI 大模型攻防知识库

本文将系统分享从零开始搭建本地大模型问答知识库过程中所遇到的问题及其解决方案。 1 概述 目前&#xff0c;搭建大语言问答知识库能采用的方法主要包括微调模型、再次训练模型以及增强检索生成&#xff08;RAG&#xff0c;Retrieval Augmented Generation&#xff09;三种方…

51单片机-定时器介绍

时间&#xff1a;2024.8.31 作者&#xff1a;Whappy 目的&#xff1a;手撕51 代码&#xff1a; 现象&#xff1a;

【fastapi】fastapi的hello world

新建这样的目录结构 main.py的代码如下 from fastapi import FastAPI from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化 Jinja2 模板引擎 templates Jinja2Templates(directory"templates")app.get("/") async def home():contex…

AI编码新时代:免费人工智能助手Blackbox AI

前言&#xff1a; 在当今快速发展的科技时代&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;从智能手机的语音助手到智能家居控制系统&#xff0c;再到在线客服和个性化推荐算法&#xff0c;AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性&am…

已成功入职小米大模型岗!!大模型面试其实挺水的,hr听到这些直接过

小米大模型面试180题 1、目前比较受欢迎的开源大模型有哪些&#xff1f; GPT系列&#xff1a;由OpenAl开发的生成式预训练模型&#xff0c;如 GPT-3。 BERT系列&#xff1a;由Google开发的转换式预训练模型&#xff0c;如BERT、RoBERTa等。 T5系列&#xff1a;由Google开发的基…

Docker 实战加速器(紧急情况!镜像库全面失效,一招解决Docker无法下载)

现象: Docker 加速器原理 Docker 镜像加速器可以帮助你更快地从 Docker Hub 或其他镜像仓库下载镜像,特别是在网络环境较差或访问 Docker Hub 较慢的情况下。常见的加速器提供商包括阿里云、网易云等。 Docker 加速器原理 Docker 镜像加速器通过在本地设置一个代理服务器,…

【ubuntu笔记】Ubuntu下SourceInsight 4.x中文乱码问题

Options->Preferences->Files&#xff0c;最底部有个Default Encoding选项&#xff0c;选择UTF-8 Options->Preferences->Syntax Decorations->File Types->Screen Font&#xff0c;选择一个可以显示中文的字体&#xff0c;例如"文泉驿等宽微米黑"…

wsl下将Ubuntu从c盘移动到其他盘

一、概述 因为自己的C盘内存不足&#xff0c;加上之后需要在Ubuntu下面下载许多的内容和东西&#xff0c;需要将其移动到d盘上面&#xff0c;这样可以拥有更大的空间。这里记载了一下自己的操作过程。 二、具体步骤 &#xff08;一&#xff09;过程 1.查看当前系统中wsl分发版…