Keyword Input Arguments for Click Events

这个报错通常出现在你尝试把带有仅限关键字参数(keyword-only arguments)的 Python 函数直接绑定到 Gradio 的 Button.click 等事件时,因为 Gradio 的事件接口只接受位置参数(positional arguments)。优先排查你的函数签名中是否存在

快速结论:这个报错通常出现在你尝试把带有仅限关键字参数(keyword-only arguments)的 Python 函数直接绑定到 Gradio 的 Button.click 等事件时,因为 Gradio 的事件接口只接受位置参数(positional arguments)。优先排查你的函数签名中是否存在 * 之后的仅限关键字参数,以及你传给 inputs 的是否都是位置参数。

适用环境:Issue 中确认的工具是 Gradio(Python)。未提供具体的 Gradio 版本、操作系统、Python、CUDA、显卡或依赖版本信息,因此这些项目无法确认。

最快修复方案:暂无确认的一步修复方案。Issue 中仅提出功能请求,维护者表示需要在 4.0 之后再看,并且提到实现工作量较大;在正式支持之前,Issue 中讨论的变通做法是写一个包装函数(wrapper)。

注意事项:该 Issue 属于 enhancement / todo,并未给出可验证的代码改动或发布版本;inputs_kwargs 只是提议中的接口,不代表任何已发布 Gradio 版本已支持。使用包装函数时仍需自行保证关键字参数的绑定关系正确,并且类型检查器可能仍无法识别事件绑定中的参数类型。

问题场景

用户希望把 Gradio 直接包装在一个包含大量关键字参数或仅限关键字参数的模型函数上。在使用 gradio.Button.click 绑定回调时,发现事件只支持位置参数(positional arguments),无法把某个组件直接映射到目标函数的关键字参数上。Issue 给出的示例中,greet(name, *, last_name)last_name 是仅限关键字参数,用户希望写的 inputs_kwargs={'last_name': txt_1} 在当时并不存在,因此只能通过额外写一个 wrapper 函数来绕开。

报错原文

Keyword Input Arguments for Click Events

说明:该 Issue 本身是功能请求,并未给出完整的运行时 traceback。核心问题即事件绑定无法接受关键字参数。Issue 中同时提到一个相关 Issue #4857,但当前讨论链未展开其具体内容。

原因分析

最可能的原因是 Gradio 的点击事件接口(如 gradio.Button.click)在绑定回调函数时,只把 inputs 中的组件按位置顺序传给 fn,没有提供将输入组件映射到指定关键字参数名的参数。因此当目标函数包含仅限关键字参数(* 之后)或调用方希望用关键字方式传参时,直接绑定就会失败或无法表达。Issue 中提到 Streamlit 的 st.button 通过类似 input_kwargs 的方式解决了同一问题,这进一步说明问题出在事件接口的参数传递能力上,而不是用户函数本身。

环境排查

  • 确认你使用的 Gradio 版本,以及该版本 Button.click 是否已支持关键字参数传入(以对应版本文档为准)。
  • 确认目标回调函数的签名:是否存在仅限关键字参数(* 之后的参数)或必填关键字参数。
  • 确认当前 inputs 列表中的组件顺序是否与函数的位置参数一一对应。
  • 确认是否已经用 wrapper 函数做过变通,以及 wrapper 内部的参数名是否与组件绑定一致。
  • Issue 未提供 Python、CUDA、PyTorch、显卡或节点版本信息,这些不作为本次排查的确认项。

解决步骤

  1. 先判断你的函数是否必须用关键字方式调用。若只是普通位置参数,直接把组件按顺序放进 inputs 即可,无需考虑本 Issue。
  2. 如果函数包含仅限关键字参数(例如 def greet(name, *, last_name)),在 Gradio 正式支持 inputs_kwargs 之前,按 Issue 中用户的做法写一个 wrapper 函数,在 wrapper 内部用关键字调用原函数,再把 wrapper 绑定到 btn.click
  3. wrapper 的形参建议全部设计为位置参数,并与 inputs 中组件的顺序严格对应,避免再次引入仅限关键字参数。
  4. 如果只是希望少改函数、又不想手写 wrapper,可关注 Gradio 后续版本对该功能请求的处理进展;Issue 中维护者只表示 4.0 之后会看,并未承诺具体版本。
  5. 若你愿意参与实现,Issue 中有贡献者表示计划在保持 inputs 向后兼容的前提下原型验证 inputs_kwargs,可与维护者确认后再开 PR;这只是讨论中的计划,尚未合入。

验证方法

用最小示例验证:写一个包含仅限关键字参数的函数,先确认直接绑定到 Button.click 无法按关键字传参;再用 wrapper 按位置参数接收组件输入、在内部以关键字调用原函数,点击按钮后检查输出组件是否返回预期结果。如果输出正确,说明变通方案生效;但该结果只证明 wrapper 方案可用,不代表 Gradio 原生已支持 inputs_kwargs

参考来源

gradio-app/gradio #5049

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24194

发表回复

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