gradio官网document关于button和click的内容:https://www.gradio.app/docs/gradio/button#event-listeners-arguments
在我自己的项目中,我困惑于gradio UI中点击了按钮之后如何返回多个输出结果。本文来源于我自己探索使用的小案例,说明了gradio(python)中如何将点击按钮链接到具体函数上的方法。
首先定义了点击按钮要执行的函数,注意到这个函数有两个arguments,return了3个值。
def my_func(a, b):
try:
return "the results are successfully generated.", int(a) + int(b), int(a) * int(b)
except Exception as e:
return f"An error occurred: {str(e)}", None, None
以下是gradio页面部分的代码:
import gradio as gr
with gr.Blocks() as demo:
# 在页面上定义两个输入框,用于输入a和b的值
input_a = gr.Text(label="a", placeholder="enter the value of a", interactive=True)
input_b = gr.Text(label="b", placeholder="enter the value of b", interactive=True)
# 定义一个按钮,用于触发计算a + b的结果
calculate_button = gr.Button("Calculate!")
# 显示成功信息或系统错误信息
message_box_1 = gr.Textbox(label="Message", lines=2, interactive=False)
# 显示计算a + b的结果
message_box_2 = gr.Textbox(label="a + b", lines=1, interactive=False)
# 显示计算a * b的结果
message_box_3 = gr.Textbox(label="a * b", lines=1, interactive=False)
# 定义按钮点击事件
calculate_button.click(
fn=my_func,
inputs=[input_a, input_b],
outputs=[message_box_1, message_box_2, message_box_3])
if __name__ == "__main__":
demo.launch(share=False, server_port=7860)
我们先来看一下运行的结果:
当我输入的内容为数字时,输出正常的结果。
但此时如果我将其中一个输入值改成字母,在第一个message box中输出的就是系统error message:
建议大家把代码拷贝到自己的环境中,然后尝试修改代码来尝试。
链接按钮点击事件的关键在于:
calculate_button.click(
fn=my_func,
inputs=[input_a, input_b],
outputs=[message_box_1, message_box_2, message_box_3])
fn
后跟函数名;
inputs
是一个数组,数量和内容内容对应的是事件函数的两个arguments;
outputs
也是一个数组,数量和内容对应的是事件函数的return。
在这个例子中,因为我希望如果发生系统错误,直接显示错误信息内容,而不显示计算结果,所以在事件函数的定义中,except return的后面两个内容需要用None
补齐。