如何让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
相关产品推荐
相关产品推荐

