使用表格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()).header(20.0, |mut header| {header.col(|ui| {ui.heading("姓名");});header.col(|ui| {ui.heading("年齡");});}).body(|mut body| {body.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();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).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).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);});}}});});});})
}