You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Egui中创建可调整列宽的表格?报错求可运行示例代码

解决egui_extras表格列宽调整问题及示例代码

先解决你遇到的类型不匹配错误

  • 确保egui和egui_extras在Cargo.toml中的版本完全一致,比如都使用0.22.0(可根据当前稳定版调整)
  • 避免导入冲突,统一使用use egui::Ui;,不要从其他路径导入同名的Ui类型

可运行的列宽可调表格示例代码

基于egui 0.22.0和egui_extras 0.22.0编写,支持Excel风格的列宽拖拽调整:

use eframe::egui;
use egui_extras::{Column, TableBuilder};

fn main() -> Result<(), eframe::Error> {
    eframe::run_native(
        "可调整列宽的Egui表格",
        eframe::NativeOptions::default(),
        Box::new(|_cc| Box::new(MyApp::default())),
    )
}

#[derive(Default)]
struct MyApp {
    // 持久化存储列宽,避免窗口刷新后重置
    column_widths: [f32; 3],
}

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.heading("Excel风格可调整列宽表格");

            TableBuilder::new(ui)
                .column(Column::auto().initial_width(self.column_widths[0]))
                .column(Column::auto().initial_width(self.column_widths[1]))
                .column(Column::auto().initial_width(self.column_widths[2]))
                .resizable(true) // 启用列宽拖拽功能
                .header(20.0, |mut header| {
                    header.col(|ui| { ui.label("姓名"); });
                    header.col(|ui| { ui.label("年龄"); });
                    header.col(|ui| { ui.label("邮箱"); });
                })
                .body(|mut body| {
                    // 示例数据行
                    for i in 0..5 {
                        body.row(20.0, |mut row| {
                            row.col(|ui| { ui.label(format!("用户{}", i)); });
                            row.col(|ui| { ui.label(format!("{}", 20 + i)); });
                            row.col(|ui| { ui.label(format!("user{}@example.com", i)); });
                        });
                    }
                });

            // 保存用户调整后的列宽
            if let Some(table) = ui.widgets::<egui_extras::TableState>().last() {
                for (i, width) in table.column_widths.iter().enumerate() {
                    if i < self.column_widths.len() {
                        self.column_widths[i] = *width;
                    }
                }
            }
        });
    }
}

关键说明

  • resizable(true)是开启列宽拖拽的核心配置
  • column_widths数组用于持久化列宽,保证调整后的数据不会丢失
  • Column::auto()让列默认自适应内容,同时支持手动拖拽调整

依赖配置(Cargo.toml)

务必保证版本一致:

[dependencies]
eframe = "0.22.0"
egui = "0.22.0"
egui_extras = "0.22.0"

内容的提问来源于stack exchange,提问作者zackhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:39:56