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

如何让Gradio的gr.Button.click()传递非Gradio块局部变量至调用函数

解决Gradio中传递局部变量给函数的问题

有三种常用方法可以实现将局部变量a传递给dummy()函数:

方法一:使用functools.partial固定参数

通过partial工具预先将a绑定到dummy的第一个参数,这样点击按钮时只需传入文本框的内容。

修改后的完整代码:

import gradio as gr
from functools import partial

def dummy(a, b):
    return '{0} {1}'.format(a, b)

with gr.Blocks() as demo:
    a = 'Hello '
    txt = gr.Textbox(value="test", label="Query", lines=1)
    answer = gr.Textbox(value="", label="Answer")
    btn = gr.Button(value="Submit")
    # 用partial绑定a到dummy的第一个参数
    btn.click(partial(dummy, a), inputs=[txt], outputs=[answer])
    gr.ClearButton([answer])

demo.launch()

方法二:用lambda函数包装

直接通过lambda函数将a和文本框的输入值一起传递给dummy,无需额外导入模块。

修改后的完整代码:

import gradio as gr

def dummy(a, b):
    return '{0} {1}'.format(a, b)

with gr.Blocks() as demo:
    a = 'Hello '
    txt = gr.Textbox(value="test", label="Query", lines=1)
    answer = gr.Textbox(value="", label="Answer")
    btn = gr.Button(value="Submit")
    # lambda包裹传递参数
    btn.click(lambda x: dummy(a, x), inputs=[txt], outputs=[answer])
    gr.ClearButton([answer])

demo.launch()

方法三:将a作为隐藏组件存储

如果需要后续动态修改a的值,可以把它放在隐藏的Gradio组件中,作为输入传递给函数。

修改后的完整代码:

import gradio as gr

def dummy(a, b):
    return '{0} {1}'.format(a, b)

with gr.Blocks() as demo:
    # 隐藏组件存储a的值
    a = gr.Textbox(value='Hello ', visible=False)
    txt = gr.Textbox(value="test", label="Query", lines=1)
    answer = gr.Textbox(value="", label="Answer")
    btn = gr.Button(value="Submit")
    # 传入隐藏组件和文本框作为参数
    btn.click(dummy, inputs=[a, txt], outputs=[answer])
    gr.ClearButton([answer])

demo.launch()

内容的提问来源于stack exchange,提问作者Franck Dernoncourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:03:31