first `Radio.change()` updates callback is not reflected

用户在 gr.Blocks() 中使用 gr.Radio 组件,通过 .change() 事件首次更新另一个组件(如设置 visible=True )时,回调运行但 UI 未反映更改。该问题在使用 Gradio 6.12.0 版本时触发,而在更早的 6.3.0 版本中表现正常。

first `Radio.change()` updates callback is not reflected

first `Radio.change()` updates callback is not reflected

快速结论:当使用 gr.Radio.change() 首次触发回调更新组件状态(如可见性)时,回调函数虽执行但 UI 未刷新。此问题在 Gradio 6.12.0 中观察到,在 6.3.0 中正常工作,属回归问题。优先检查 Gradio 版本并升级到包含修复的版本。

问题场景

用户在 gr.Blocks() 中使用 gr.Radio 组件,通过 .change() 事件首次更新另一个组件(如设置 visible=True)时,回调运行但 UI 未反映更改。该问题在使用 Gradio 6.12.0 版本时触发,而在更早的 6.3.0 版本中表现正常。

报错原文

When gr.Radio.change() is triggered for the first time, the callback function runs, but the output component state is not reflected in the UI.

On the first test_comp.change() call, the callback runs, but the visibility update is not reflected in the UI.

原因分析

根据 Issue 维护者的分析与后续修复(#13429),该问题属于 Gradio 内部的回归 bug。可能原因是首次事件触发时,初始的事件路径丢掉了状态或渲染更新,导致回调结果未正确应用于 UI。由于 Issue 讨论中未提供更底层的根因细节,具体机制仍为推测。

环境排查

  • 确认 gradio 版本:此问题在 6.12.0 中出现,在 6.3.0 中正常工作。
  • 检查 gradio_client 版本(示例中为 2.4.1)。
  • 操作系统:Windows(Issue 报告者使用)。
  • 依赖环境:Python 包版本如 fastapianyiohttpx 等,虽非直接原因,但可辅助排查环境兼容性。

解决步骤

  1. 升级 Gradio 版本:根据 Issue 维护者声明,此问题已由 PR #13429 修复。请将 Gradio 升级到包含该修复的版本(如 6.12.0 之后的版本)。
  2. 可优先尝试:如果无法升级,可尝试使用 gr.Radio.change() 的替代事件(如 gr.Radio.input())或将组件更新逻辑包裹在 gr.update() 中,例如:lambda: gr.Radio.update(visible=True)。注意:此方法未在 Issue 中明确验证,仅为推测。
  3. 验证原始代码:在升级后运行以下最小复现代码,确认组件可见性更新是否生效。
import gradio as gr

with gr.Blocks() as dem:
    test_comp = gr.Radio(choices=["1", "2"])
    test_comp2 = gr.Radio(choices=["1", "2"], visible=False)

    test_comp.change(fn=lambda: gr.Radio(visible=True), outputs=test_comp2)

dem.launch()

验证方法

运行上述最小复现代码,首次选择 test_comp 中的任意选项后,观察 test_comp2 是否变为可见。如果之前不可见,现在能正确显示,则问题已解决。

参考来源

gradio-app/gradio #13302

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 12080

发表回复

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