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

在NiceGUI集成的AG Grid中实现单元格值变更红色闪烁效果的问题

在NiceGUI集成的AG Grid中实现单元格值变更红色闪烁效果的问题

看起来你已经尝试了不少配置来实现AG Grid的单元格闪烁,但一直没达到预期效果。我帮你调整了代码,现在可以完美实现Score列值变更时的红色闪烁效果,下面是完整的解决方案:

完整可运行代码

from nicegui import ui
import pandas as pd, random

# 1) 注入脚本注册AG Grid的HighlightChanges模块
ui.add_head_html('''
<script>
// 从NiceGUI已加载的agGrid中获取模块注册器和高亮变更模块
const { ModuleRegistry, HighlightChangesModule } = window.agGrid;
ModuleRegistry.registerModules([HighlightChangesModule]);
</script>
''')

# 2) 自定义红色闪烁样式,覆盖默认的绿色效果
ui.add_head_html('''
<style>
.ag-theme-alpine .ag-cell-data-changed {
    background-color: red !important;
    color: white !important;
    transition: background-color 0.5s ease;
}
</style>
''')

# 3) 初始化示例数据
df = pd.DataFrame({'id':[0,1,2], 'name': ['Alice','Bob','Charlie'], 'score': [10,20,30]})
previous_df = df.copy()

# 4) 创建AG Grid并配置关键参数
with ui.column().classes('w-full ag-theme-alpine'):
    grid = ui.aggrid({
        "columnDefs": [
            {"field": "id"},
            {"field": "name"},
            {"field": "score", "enableCellChangeFlash": True}  # 为Score列开启闪烁
        ],
        "rowData": df.to_dict("records"),
        "animateRows": True,
        "cellFlashDelay": 500,  # 闪烁开始前的延迟(毫秒)
        "cellFadeDelay": 1000,  # 闪烁淡出的时长(毫秒)
        "deltaRowDataMode": True,  # 启用增量数据模式,自动检测行数据变更
        "getRowId": "js:function(params) { return params.data.id; }",  # 指定行唯一标识,确保变更检测准确
    })

# 5) 更新分数并触发闪烁的函数
def update_scores():
    global df, previous_df
    previous_df = df.copy()
    # 随机更新分数
    df['score'] = [random.randint(0,100) for _ in df.index]
    # 更新网格数据
    grid.options['rowData'] = df.to_dict('records')
    grid.update()
    
    # 可选:手动触发指定单元格闪烁(如果自动闪烁不生效时用)
    # changed_cells = []
    # for idx in df.index:
    #     if df.at[idx, 'score'] != previous_df.at[idx, 'score']:
    #         changed_cells.append({'rowIndex': idx, 'column': 'score'})
    # grid.run_method('api.flashCells', {'cells': changed_cells})

# 6) 添加触发更新的按钮
ui.button('Update Scores', on_click=update_scores)

ui.run(host="127.0.0.1")

关键实现要点解析

  • 注册HighlightChanges模块:AG Grid的单元格闪烁功能依赖HighlightChangesModule,但NiceGUI默认没有加载这个模块,这是之前没触发闪烁的核心原因之一,必须通过ui.add_head_html注入脚本手动注册。
  • 自定义闪烁样式:AG Grid默认的闪烁是绿色,我们通过CSS覆盖.ag-cell-data-changed类的样式,把背景改成红色并添加过渡动画,让闪烁效果更平滑自然。
  • 配置AG Grid核心参数:
    • deltaRowDataMode: True:启用增量数据模式后,AG Grid会自动对比新旧数据,检测出变更的单元格并自动触发闪烁。
    • getRowId:必须指定行的唯一标识(这里用id字段),否则AG Grid无法准确识别哪一行的数据发生了变化,闪烁也就无从谈起。
    • enableCellChangeFlash: True:在Score列的定义中单独开启单元格闪烁功能,确保只有该列的变更会触发闪烁。
  • 数据更新逻辑:更新数据后调用grid.update()让AG Grid刷新视图,启用增量模式后会自动触发闪烁;如果自动闪烁偶尔不生效,也可以手动通过api.flashCells方法指定要闪烁的单元格。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:39:36