Dataframe add row button disappears, generally extremely poor performance

该问题出现在 Gradio 6.12 的 gr.Dataframe (interactive/input 模式)上,主要表现为有数据时看不到“Add row”按钮、新增末行需要切换全屏才渲染、空表点击一次按钮消失,以及偶发交互卡死。优先排查两件事:一是把 Gradio 升级到包含 #13744 的版

快速结论:该问题出现在 Gradio 6.12 的 gr.Dataframe(interactive/input 模式)上,主要表现为有数据时看不到“Add row”按钮、新增末行需要切换全屏才渲染、空表点击一次按钮消失,以及偶发交互卡死。优先排查两件事:一是把 Gradio 升级到包含 #13744 的版本以修复末行 UI 不刷新的问题,二是确认“Add row”按钮本身是刻意的可用性设计,需要改用单元格右键菜单新增行。

适用环境:Issue 中仅确认工具为 Gradio,报告版本为 6.12(System Info 只填了 “6.12”),未提供操作系统、Python、CUDA、显卡或依赖版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 明确由 #13744 修复了“新增末行不渲染”的问题;浏览器卡死问题在 Table.svelte 中通过移除无限渲染循环做了机制层面的处理,但报告者未能复现该卡死本身,因此属于未完全验证。按钮消失与空表按钮一次点击后消失,均被判定为设计行为,不需要代码修改。

注意事项:升级到含 #13744 的版本只针对“末行不渲染”,不会让有数据的表格重新出现常驻的“Add row”按钮。若浏览器仍会卡死,需要按新的复现步骤另开 Issue,而不是继续在本 Issue 追踪。

问题场景

用户在 Gradio 6.12 中使用 gr.Dataframe 组件,且表格以交互输入模式使用(带 valueheadersdatatypetype="array")。典型场景是「Hard Rules」一类可编辑规则表:预填若干行数据,用户需要在其上增删改行。此时同时遇到下述四类现象:

  • 表格已有值且可交互时,没有 “Add row” 按钮;
  • 在最后一行之后新增行时,新末行不显示,必须进入全屏再退出触发重新渲染才出现;其余行更新正常;
  • 使用空 DataFrame 输入时按钮会出现,但点击一次后按钮消失;
  • 偶发:与 DataFrame 交互时浏览器卡死(难以稳定复现)。

报错原文

Dataframe add row button disappears, generally extremely poor performance

- Dataframe with values and interactive (input mode) does not have a add row button.
- When adding a row to the last row, the dataframe does not show that last row until I go fullscreen and back to re-render that last row.
- When using a empty dataframe input, add row appears, but clicking it once makes it disappear.
- Hard to reproduce but sometimes interacting with the DF makes the browser hang.

原因分析

该 Issue 的四个症状并非同一原因,维护者做了分项定性:

  • 新增末行不渲染:属于虚拟窗口未在行数变化时重新读取的问题。切换全屏之所以能临时绕过,是因为全屏切换强制触发了一次重新计算。
  • 浏览器卡死:可能原因指向 Table.svelteautoResetPageIndex / autoResetExpanded 相关改动。该改动移除了一个无限渲染循环,而卡死正是这类循环会经过的机制;但报告者无法复现卡死本身,所以这是基于机制的推断,而非已验证的修复。
  • 按钮消失:前两个症状中的“按钮消失”与“空表按钮点击一次后消失”被判定为设计使然。行插入是单元格菜单动作(Add row above / Add row below),必须锚定在一个已存在的行上;没有行的表格无法右键,因此用 EmptyRowButton 作为该唯一状态的逃生入口。一旦表格有了行,该按钮退役即为预期行为,不等于 Bug。

环境排查

  • 确认 Gradio 版本:Issue 报告为 6.12,需确认是否已升级到包含 #13744 的版本。
  • 确认组件用法:gr.Dataframe 是否设置了 interactive(input 模式)、valueheadersdatatypetype="array",这些是复现场景的关键参数。
  • 确认新增行的操作方式:是通过常驻按钮,还是通过单元格右键菜单(Add row above / Add row below)。
  • 确认是否仍能在与表格交互时复现浏览器卡死;若可复现,需要收集浏览器与复现步骤。
  • Issue 未提供操作系统、Python、CUDA、PyTorch、显卡与依赖版本,这些不是本次定位的已确认因素。

解决步骤

  1. 将 Gradio 升级到包含 #13744 的版本,用于修复“在最后一行之后新增的行不渲染、需切换全屏才显示”的问题。该修复的做法是在行数变化时重新读取虚拟窗口。
  2. 关于 Table.svelteautoResetPageIndex / autoResetExpanded 的改动:它移除了一个无限渲染循环,是缓解交互卡死的机制性改动。若你仍遇到卡死,不要依赖此条,应另开 Issue 并附复现步骤。
  3. 不要再等待“有数据时显示常驻 Add row 按钮”的改动。该门控是刻意的:行插入需锚定已有行,请改为在目标单元格上右键,使用 Add row aboveAdd row below 新增行。
  4. 理解空表行为:空表状态下 EmptyRowButton 是唯一的加行入口;一旦存在行,该按钮不再出现属于设计预期,不需要代码修改。
  5. 若升级后仍能稳定复现浏览器 hang,记录操作路径、表格行数、交互动作(编辑/新增/删除/滚动)并提交新 Issue。

验证方法

  • 升级到含 #13744 的版本后,在末行之后新增一行,确认新行无需切换全屏即可立即渲染;可在表格与全屏之间来回切换做对照,确认结果一致。
  • 用 Issue 中同一段 gr.Blocks + gr.Dataframe 配置复现,确认表格有值时不依赖常驻按钮,而通过单元格右键菜单的 Add row above / Add row below 能正常增行。
  • 若关注卡死问题,需能稳定复现后再判定;本 Issue 中该项未获验证,仅能确认对应渲染循环已被移除。

参考来源

gradio-app/gradio #13272

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22544

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注