快速结论:Gradio 的 Dataframe 组件在流式输出多行数据时,虚拟滚动表只在首次从 0 行变为非 0 行时触发重新测量,导致后续新增行无法渲染,直到手动点击表格才会刷新。优先排查 Gradio 版本是否为 6.20.0 或 6.22.0,并确认是否使用了生成器(yield)逐行输出 DataFrame。
适用环境:已确认在 Gradio 6.20.0(Linux 系统)及 6.22.0 版本中出现;涉及 pandas、Python 环境,操作系统为 Linux。
最快修复方案:目前 Issue 中已定位根因但尚未合并官方修复补丁(外部 PR 暂停接收)。暂无确认的一步修复方案,可优先尝试通过官方 Issue #13611 跟进修复进度,或在本地修改源码中 virtual.svelte.ts 的测量逻辑作为临时方案。
注意事项:本地修改 Svelte 源码需要重新构建 Gradio 前端,且升级 Gradio 版本后修改会被覆盖;该方案尚未经过官方验证,仅基于 Issue 评论中的根因分析。
问题场景
用户在 Gradio Blocks 应用中使用 gr.Dataframe 组件展示耗时计算的中间结果。通过生成器函数(yield)逐行产出 DataFrame 数据并流式推送到前端,期望表格能随着计算进度实时新增行。但实际运行时,只有第一行能正常显示,后续行只有在用户手动点击表格(触发滚动或 resize 代码路径)时才会刷出。同时确认了流式输出到 Markdown 组件无此问题。
报错原文
Dataframe stream not rendering
用户实际观察到的现象是:Dataframe 组件只渲染第一行,后续行在点击表格前不显示,且没有任何显式报错输出到控制台。
原因分析
可能原因:Gradio 的 Dataframe 组件使用虚拟化表格(js/dataframe/shared/tanstack/virtual.svelte.ts)来优化大量数据的渲染性能。该虚拟化逻辑只在初始的 0 行 → N 行 状态变化时调用 virtualizer.measure() 重新测量可见行数,而后续行数变化时仅调用 setOptions() 更新内部配置,不会触发重新测量。因此当通过生成器逐行流式推送数据时,底层数据(values → row_data → rows)虽然在持续更新,但虚拟化器维护的 virtual_items(实际渲染的列表)在第一行后就被冻结,直到手动点击表格触发滚动相关代码路径才会强迫刷新。
Issue 评论中的日志记录证实了这一推断:row_data/rows 从 0 递增到 5,与流式数据同步;而 virtual_items 从 0 变为 1 后就不再变化,直到用户点击表格。
环境排查
- 确认 Gradio 版本:Issue 中报告了 6.20.0 和 6.22.0 两个版本存在问题。
- 确认是否是流式输出:检查代码中是否使用
yield或gr.update逐次推送 DataFrame。 - 对照最小复现代码:使用 Issue 中的 MWE(最小可复现示例)确认是否可以稳定重现。
- 排查是否与非流式输出混用:验证一次性输出完整 DataFrame 是否正常。
- 检查前端是否触发过任何手势(点击/滚动),确认在无交互时问题是否持续存在。
解决步骤
- 验证问题复现:使用 Issue 中的最小复现代码,确认在本地环境中表格第一行后的数据不会自动渲染。
- 确认根因(已定位):查看
gradio_app源码中的js/dataframe/shared/tanstack/virtual.svelte.ts,定位到仅当prev_count === 0 && current_count > 0时调用virtualizer.measure()的逻辑。 - 本地修复(临时、可优先尝试):将测量条件改为任何行数变化时都触发重新测量:
// 修改前 if (prev_count === 0 && current_count > 0) { virtualizer.measure(); } // 修改后 if (current_count !== prev_count) { virtualizer.measure(); }修改后需重新构建 Gradio 前端。
- 等待官方修复:由于 Issue 评论指出外部 PR 暂停接收,建议关注官方后续修复合入情况。可订阅 Issue #13611 获取更新。
- 替代方案(未验证):考虑在流式输出完成后一次性渲染完整 DataFrame,或先行输出前若干行、在计算结束后再更新为完整数据;此方案未在 Issue 中讨论过,仅作为临时规避手段。
验证方法
使用 Issue 中提供的最小复现代码运行应用,观察 DataFrame 在无用户交互的情况下是否能随生成器输出逐行自动渲染。修复后 virtual_items 的数量应与底层 rows 数量保持一致,命令行日志中可观察到两者同步递增(如 0→1→2→3→4→5),且无需点击表格即可看到全部行。
参考来源
gradio-app/gradio #13611: Dataframe stream not rendering
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: error when attaching file in chat ----AttributeError("'Request' object has no attribute 'file'")](https://www.chat-gpts.plus/wp-content/uploads/2026/08/11805-40332ec3-768x403.jpg)
![[Question]: No keyword or question was found in dataSet afer files loaded by customized ingestion pipeline](https://www.chat-gpts.plus/wp-content/uploads/2026/08/11474-a36958b1-768x403.jpg)
