DearPyGui表格组件全面指南

DearPyGui表格组件全面指南

【免费下载链接】DearPyGui Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies 【免费下载链接】DearPyGui 项目地址: https://gitcode.com/gh_mirrors/de/DearPyGui

表格组件概述

DearPyGui的表格API是一个底层API,不仅可以用于数据展示,还能作为布局机制使用。表格由多个组件构成,包括列(columns)、行(rows)、单元格(cells)以及要显示的实际内容项。

基础表格创建

创建表格的基本步骤如下:

  1. 使用dpg.table()创建表格容器
  2. 使用dpg.add_table_column()添加列
  3. 使用dpg.table_row()创建行并在其中添加内容
import dearpygui.dearpygui as dpg

dpg.create_context()

with dpg.window(label="示例窗口"):
    with dpg.table(header_row=False):
        # 添加3列
        dpg.add_table_column()
        dpg.add_table_column()
        dpg.add_table_column()
        
        # 添加4行数据
        for i in range(4):
            with dpg.table_row():
                for j in range(3):
                    dpg.add_text(f"第{i}行 第{j}列")

dpg.create_viewport(title='表格示例', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

注意:表格最多支持64列。

单元格内容控制

单个单元格可以包含多个控件,通过dpg.table_cell()实现:

with dpg.table(header_row=False, resizable=True):
    dpg.add_table_column(label="列1")
    dpg.add_table_column(label="列2")
    
    for i in range(3):
        with dpg.table_row():
            for j in range(2):
                with dpg.table_cell():
                    dpg.add_button(label=f"按钮A {i},{j}")
                    dpg.add_button(label=f"按钮B {i},{j}")

表格样式定制

边框控制

通过以下参数控制表格边框显示:

  • borders_innerH: 内部水平边框
  • borders_innerV: 内部垂直边框
  • borders_outerH: 外部水平边框
  • borders_outerV: 外部垂直边框

行背景色

使用row_background=True启用交替行背景色:

with dpg.table(header_row=True, row_background=True,
               borders_innerH=True, borders_outerH=True):
    # 列和行定义...

列标题设置

启用header_row=True并设置列标签即可显示列标题:

with dpg.table(header_row=True):
    dpg.add_table_column(label="姓名")
    dpg.add_table_column(label="年龄")
    # 行数据...

列宽调整策略

表格支持多种列宽调整策略:

  1. 可调整大小:设置resizable=Trueborders_innerV=True
  2. 调整策略:通过policy参数设置
    • mvTable_SizingFixedFit: 固定宽度适应内容
    • mvTable_SizingFixedSame: 所有列固定相同宽度
    • mvTable_SizingStretchProp: 按比例拉伸
    • mvTable_SizingStretchSame: 等比例拉伸

混合策略示例

with dpg.table(policy=dpg.mvTable_SizingFixedFit):
    dpg.add_table_column(label="固定列1", width_fixed=True)
    dpg.add_table_column(label="固定列2", width_fixed=True)
    dpg.add_table_column(label="弹性列", width_stretch=True)

高级列选项

表格列支持丰富的配置选项:

选项默认值说明
init_width_or_weight0.0初始宽度(固定策略)或权重比例(拉伸策略)
default_hideFalse默认隐藏列
width_stretchFalse列可拉伸
no_resizeFalse禁止手动调整大小
no_reorderFalse禁止列重排序
no_sortFalse禁止排序

表格排序实现

DearPyGui不直接处理数据排序,需要开发者实现回调:

def sort_callback(sender, sort_specs):
    if not sort_specs: return
    
    # 获取所有行
    rows = dpg.get_item_children(sender, 1)
    
    # 创建可排序列表(行ID, 排序值)
    sortable = []
    for row in rows:
        cell = dpg.get_item_children(row, 1)[0]
        sortable.append([row, dpg.get_value(cell)])
    
    # 根据排序方向排序
    reverse = sort_specs[0][1] < 0
    sortable.sort(key=lambda x: x[1], reverse=reverse)
    
    # 重新排序行
    dpg.reorder_items(sender, 1, [x[0] for x in sortable])

with dpg.table(sortable=True, callback=sort_callback):
    # 列和行定义...

选择功能实现

通过selectable控件实现行/单元格选择:

def select_callback(sender, app_data, user_data):
    print(f"选择了: {user_data}")

with dpg.table() as table:
    dpg.add_table_column(label="选择列")
    
    for i in range(10):
        with dpg.table_row():
            # span_columns=True选择整行
            dpg.add_selectable(label=f"行{i}", span_columns=True,
                             callback=select_callback, user_data=i)

性能优化技巧

对于大型表格,使用裁剪器(clipper)提升性能:

with dpg.table(clipper=True):  # 启用裁剪
    # 添加列
    for i in range(5):
        dpg.add_table_column()
    
    # 添加大量行(只渲染可见部分)
    for i in range(10000):
        with dpg.table_row():
            for j in range(5):
                dpg.add_text(f"行{i} 列{j}")

最佳实践建议

  1. 对于静态表格,使用固定宽度策略(mvTable_SizingFixedFit)
  2. 需要自适应宽度时,使用拉伸策略(mvTable_SizingStretchProp)
  3. 超过100行的表格务必启用裁剪器
  4. 复杂表格考虑分页显示
  5. 频繁更新的表格使用delay_search=True减少渲染开销

通过灵活运用这些功能,可以创建出功能丰富、性能优异的表格界面。

【免费下载链接】DearPyGui Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies 【免费下载链接】DearPyGui 项目地址: https://gitcode.com/gh_mirrors/de/DearPyGui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值