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

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格

使用表格egui_extras::TableBuilder

// Cargo.toml
[dependencies]
eframe = "0.32.1"
egui = "0.32.1"
egui_extras = "0.32.1"
  • egui_extras::Column::auto() 列宽根据内容自动计算
  • .resizable(true) 允许用户手动拖动调整列宽
fn main() -> eframe::Result<()> {// 配置原生窗口参数let options = eframe::NativeOptions::default();eframe::run_simple_native("使用表格", options, move |ctx, _frame| {egui::CentralPanel::default().show(ctx, |ui| {load_fonts(&ctx);// 创建一个表格egui_extras::TableBuilder::new(ui)// 设置列属性// 创建一个自动调整宽度的列.column(egui_extras::Column::auto().resizable(true))// 创建一个占据剩余可用宽度的列// 该列自动填充容器中剩余未被占用的列.column(egui_extras::Column::remainder())// 设置表头,行高20.header(20.0, |mut header| {header.col(|ui| {// 标题,加粗,字号加大等ui.heading("姓名");});header.col(|ui| {ui.heading("年龄");});})// 设置表体.body(|mut body| {// 一行数据,行高30body.row(30.0, |mut row| {// 一个单元格的数据row.col(|ui| {ui.label("小李");});row.col(|ui| {ui.button("25");});});// 一行数据body.row(30.0, |mut row| {row.col(|ui| {ui.label("小赵");});row.col(|ui| {ui.button("16");});});});});})
}

批量设置数据方式一

fn main() -> eframe::Result<()> {// 配置原生窗口参数let options = eframe::NativeOptions::default();// 生成20行10列数据let bbody: Vec<Vec<String>> = (0..20).map(|i| (0..10).map(|e| format!("{}--{}", i, e)).collect()).collect();eframe::run_simple_native("使用表格", options, move |ctx, _frame| {egui::CentralPanel::default().show(ctx, |ui| {load_fonts(&ctx);egui_extras::TableBuilder::new(ui)// 设置10列,自动调整宽度,可手动调整.columns(egui_extras::Column::auto().resizable(true), 10)// 设置表头.header(20.0, |mut header| {for idx in 0..10 {header.col(|ui| {ui.heading(format!("{}", idx));});}})// 设置表体.body(|mut body| {for idx in &bbody {body.row(30.0, |mut row| {for idy in idx {row.col(|ui| {ui.label(idy);});}});}});});})
}

批量设置数据方式二rows

fn main() -> eframe::Result<()> {// 配置原生窗口参数let options = eframe::NativeOptions::default();let bbody: Vec<Vec<String>> = (0..20).map(|i| (0..10).map(|e| format!("{}--{}", i, e)).collect()).collect();eframe::run_simple_native("使用表格", options, move |ctx, _frame| {egui::CentralPanel::default().show(ctx, |ui| {load_fonts(&ctx);egui_extras::TableBuilder::new(ui)// 设置10列,自动调整宽度,可手动调整.columns(egui_extras::Column::auto().resizable(true), 10)// 设置表头.header(20.0, |mut header| {for idx in 0..10 {header.col(|ui| {ui.heading(format!("{}", idx));});}})// 设置表体.body(|mut body| {body.rows(17., bbody.len(), |mut row| { // 所有行数据let r_idx = row.index();            // 当前行的索引if let Some(d) = bbody.get(r_idx) { // 行内有数据for idx in d {                  // 遍历一行数据row.col(|ui| {ui.label(idx);});}}});});});})
}
http://www.dtcms.com/a/348347.html

相关文章:

  • 时间复杂度
  • 多核多线程应用程序开发可见性和乱序如何处理
  • ESNP LAB 笔记:配置MPLS(Part2)
  • Java Stream API详解
  • iptables 防火墙核心知识梳理(附实操指南)
  • VS2022的MFC中关联使用控制台并用printf输出调试信息
  • GPT 模型详解:从原理到应用
  • 构建AI智能体:十二、给词语绘制地图:Embedding如何构建机器的认知空间
  • 大白话解析:多证明验证(Merkle Multi-Proof)​
  • 【Python】CSV批量转Excel工具 (Tkinter版)
  • 【Docker基础】Docker-compose多容器协作案例示例:从LNMP到分布式应用集群
  • 复杂姿态误报率↓78%!陌讯多模态算法在跌倒检测的医疗落地
  • 恶劣天气下漏检率↓79%!陌讯多模态时序融合算法在道路事故识别的实战优化
  • 第16届蓝桥杯C++中高级选拔赛(STEMA)2025年1月12日真题
  • 大模型面试题剖析:模型微调和蒸馏核心技术拆解与考点梳理
  • 爆肝三周,我终于上线了自己的第一个小程序
  • 01-鸿蒙系统概览与发展历程
  • 鸿蒙中Frame分析
  • 线段树相关算法题(1)
  • mybatis过渡到mybatis-plus过程中需要注意的地方
  • 自由学习记录(87)
  • 《飞算Java开发实战:从入门安装到项目部署》
  • FPGA 时序分析(一)
  • ubuntu中的nginx.conf和windows中的nginx.conf内容对比
  • LeetCode 101 刷题 - (1) 第一章 最易懂的贪心算法
  • K8S核心知识点
  • Teams Bot机器人实时语音识别的多引擎的处理
  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • 【机器人零件】蜗轮蜗杆减速器
  • Android面试指南(五)