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

Rust图形界面编程:egui平直布局

文章目录

    • 平直布局
    • with_layout

平直布局

在前面的示例中,已经用到了ui.horizontal用来布局,其特点是水平摆放控件。相应地,ui.vertical则是垂直摆放控件。根据控件的摆放顺序不同,这两个布局组件衍生出一系列布局函数

  • horizontal_top, 此即horizontal默认的布局方式
  • horizontal_centered
  • horizontal_wrapped
  • vertical_centered, 此为vertical的默认布局方式
  • vertical_centered_justified

下面演示一下这几种布局的区别

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use eframe::egui;struct MyApp {
}impl Default for MyApp {fn default() -> Self {Self { }}
}impl eframe::App for MyApp {fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {egui::CentralPanel::default().show(ctx, |ui| {ui.horizontal_wrapped(|ui| {for i in 1..8{if ui.button(format!("horizontal_wrapped{}", i)).clicked(){};}});ui.horizontal_top(|ui| {for i in 1..8{if ui.button(format!("horizontal_top{}", i)).clicked(){};}});ui.vertical_centered(|ui| {if ui.button("vertical_centered1").clicked(){};if ui.button("vertical_centered2").clicked(){};});ui.vertical_centered_justified(|ui| {if ui.button("vertical_centered_justified1").clicked(){};if ui.button("vertical_centered_justified2").clicked(){};});ui.horizontal_centered(|ui| {for i in 1..8{if ui.button(format!("horizontal_centered{}", i)).clicked(){};}});});}
}fn main() -> Result<(), eframe::Error> {let options = eframe::NativeOptions {initial_window_size: Some(egui::vec2(640.0, 320.0)),..Default::default()};eframe::run_native("layout",options,Box::new(|_cc| Box::<MyApp>::default()),)
}

效果如下

在这里插入图片描述

即以_warpped为后缀的水平布局,其控件会自动换行;以_justified为后缀的垂直布局,其控件会自适应水平方向的宽度;以centered为后缀的水平布局,会自动占据剩余空间的中间位置。

with_layout

这些水平或者垂直的布局显然不足以涵盖所有情况,所以egui提供了更加灵活的布局方法with_layout,其输入参数除了填充组件外,还有一个Layout类型的结构体,可调用下列函数来生成

  • left_to_right
  • right_to_left
  • top_down
  • top_down_justified
  • bottom_up
  • with_main_aligned
  • with_main_align
  • with_cross_align

这些函数的参数是枚举类型的Align,共有三个选择,分别是Min, Center以及Max。接下来,将show函数更改为如下形式,

egui::CentralPanel::default().show(ctx, |ui| {ui.with_layout(egui::Layout::left_to_right(egui::Align::Min),|ui| {for i in 1..5{if ui.button(format!("left_to_right{}", i)).clicked(){};}});ui.with_layout(egui::Layout::top_down(egui::Align::Max),|ui| {for i in 1..5{if ui.button(format!("top_down{}", i)).clicked(){};}});
});

得到结果如下

在这里插入图片描述

由此可知,Align表示当前布局在父组件中的位置,Min表示位置尽可能小,Max表示位置尽可能大。

http://www.lryc.cn/news/231444.html

相关文章:

  • Android13 wifi adb 串口开启
  • 关于一个屏幕取词程序,AI给的创建思路及指导
  • MySql跨库跨表触发器
  • NextJS开发:shadcn/ui中Button组件扩展增加图标
  • Go 语言
  • 【计算机网络笔记】DHCP协议
  • 21 Linux 自带的LED驱动
  • 神通MPP数据库的跨库查询
  • JavaWeb-WEB请求过程
  • 《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
  • 32 _ 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?
  • TCP怎么实现可靠传输
  • C# new 和 override 的区别
  • C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』
  • 在Windows以命令行方式根据文件名称搜索文件
  • asp.net数字档案管理系统VS开发sqlserver数据库web结构c#编程web网页设计
  • 数据挖掘 决策树
  • “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 WP
  • [Android]修改应用包名、名称、版本号、Icon以及环境判断和打包
  • 基于风驱动算法优化概率神经网络PNN的分类预测 - 附代码
  • 安全计算环境(设备和技术注解)
  • 【Hello Go】Go语言函数
  • docker小技能:容器IP和宿主机IP一致( Nacos服务注册ip为内网ip,导致Fegin无法根据服务名访问 )
  • Android笔记:震动实现
  • CSDN每日一题学习训练——Java版(二叉搜索树迭代器、二叉树中的最大路径和、按要求补齐数组)
  • WPF中有哪些布局方式和对齐方法
  • 【2012年数据结构真题】
  • k8s_base
  • 2023年亚太杯APMCM数学建模大赛数据分析题MySQL的使用
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业