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

如何用FLTK Widget美观展示Rust应用中的数据库物品数据?

基于Rust的物品数据展示方案与Widget选择

一、Widget选型建议

桌面GUI场景

  • egui Table组件:轻量易集成,自带样式定制能力,能快速实现美观的结构化数据展示,适配大多数简单GUI需求
  • iced DataGrid组件:风格现代,支持排序、筛选等交互功能,适合需要进阶操作的物品管理场景

终端UI场景

  • tui-rs Table组件:纯终端环境下的最优选择,支持自定义单元格样式、边框与布局,完全脱离图形界面依赖

二、实现示例(以egui为例)

先在Cargo.toml中添加依赖:

[dependencies]
egui = "0.24"
eframe = "0.24"

核心代码实现:

use eframe::egui;

#[derive(Debug, Clone)]
struct Item {
    name: String,
    quantity: u32,
    price: f64,
}

struct ItemManagerApp {
    items: Vec<Item>,
}

impl eframe::App for ItemManagerApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.heading("物品数据库");
            
            // 构建带样式的表格
            egui::Table::new("inventory_table")
                .striped(true)
                .resizable(true)
                .show(ui, |mut table| {
                    // 渲染表头
                    table.headers(|mut headers| {
                        headers.col(|ui| ui.strong("物品名称"));
                        headers.col(|ui| ui.strong("库存数量"));
                        headers.col(|ui| ui.strong("单价"));
                    });
                    
                    // 渲染物品数据行
                    for item in &self.items {
                        table.row(|mut row| {
                            row.col(|ui| ui.label(&item.name));
                            row.col(|ui| ui.label(item.quantity.to_string()));
                            row.col(|ui| ui.label(format!("¥{:.2}", item.price)));
                        });
                    }
                });
        });
    }
}

fn main() -> Result<(), eframe::Error> {
    // 模拟从数据库加载的物品数据
    let sample_items = vec![
        Item { name: "笔记本".into(), quantity: 10, price: 29.9 },
        Item { name: "钢笔".into(), quantity: 25, price: 12.5 },
        Item { name: "便利贴".into(), quantity: 50, price: 3.2 },
    ];

    eframe::run_native(
        "物品管理系统",
        eframe::NativeOptions::default(),
        Box::new(|_cc| Box::new(ItemManagerApp { items: sample_items })),
    )
}

三、视觉优化技巧

  • 开启striped(true)实现隔行变色,提升大数量数据的可读性
  • 启用resizable(true)让用户可自由调整列宽
  • 对价格字段做格式化处理,统一展示精度与货币符号
  • 通过ui.style_mut()自定义字体、边框颜色、单元格内边距,匹配应用整体风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:45:37