关于Gradio中Button用法及事件监听器click方法使用

 更新时间:2024年11月11日 09:42:09   作者:有点野的程序猿  
介绍了在Gradio中使用Button组件和事件监听器的click方法,通过一个简单的示例展示了如何实现点击按钮输出一行文字的功能,在实际项目中遇到了一个错误,经过排查和请教室友后,发现问题出在inputs参数的传递上,需要传入一个包含输入组件的列表

Gradio中Button用法及事件监听器click方法使用

瞎想乱记

事情是这样的:入职时面试的是Java,简历中写了会python,刚好最近有个小项目需要用Python实现,老板就将这个项目交给了我,我…

项目中还真遇到了好几个坑,分享一下

功能介绍

功能很简单,就是一个添加一个按钮,并给这个按钮添加一个监听器,实现click方法(我一个后端搞起了前端,以后请叫我全栈)。

相关代码

Gradio的基础不再介绍了,不会的可以去先看看基础

按钮的代码如下:

import gradio as gr
submit_button = gr.Button('提交')

以上是定义了一个名为“提交”的按钮,我想实现通过点击此按钮实现某个方法,输出一行文字,方法的入参有三个参数

具体代码如下:

image = gr.Image(label="图片", sources=["upload"], type="filepath")
video = gr.Video(label="视频", sources=["upload"], format='mp4')
audio = gr.Audio(label="音频", sources=["upload"])
output_video = gr.Text()
submit_button.click(fun_train_video, inputs=[image, video, audio], outputs=output_video)

稍微解释下这行代码,click是按钮的监听器,当点击“提交”按钮后,会运行函数fun_train_video,这个函数的入参有三个,

分别是:image,video,audio,函数的输出是output_video。

这样的代码pycharm并没有报错,但是在运行时会出下下面的错误

“inputs”: [block._id for block in self.inputs],
^^^^^^^^^
AttributeError: ‘tuple’ object has no attribute ‘_id’

解决方法

查了很多资料,包括chatGPT,但是并没有得到理想的答案,问题迟迟没有解决,眼看着项目要交付,着急啊,后来想起了我的研究生室友,人称憨憨,上学时写的一手好python,果断请教,最后得到解决。

其实这个问题的根源是这样的:在监听器click方法中,inputs参数需要传入一个包含输入组件的列表,但是inputs=[image, video, audio]这种写法是包含元组的列表,这个元组包含了输入组件和它的标签,但不是组件本身。

当gradio尝试获取输入组件id的时候,会从元组中获取_id属性,但是元组中没有这个属性,就会抛出异常

修改代码如下

submit_button.click(fun_train_video, inputs=[image[0], video, audio], outputs=output_video)

那就是在第一个参数后边加一个序号,这样gradio就可以找到组件的id了,挺神奇的,更深层的逻辑还有待去了解,问题总算解决了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python实现图像的随机增强变换

    python实现图像的随机增强变换

    这篇文章主要为大家介绍了如何利用pythons制作一个小工具工具,可以实现图像的随机增强变换,可用于分类训练数据的增强,有需要的可以参考下
    2024-11-11
  • 一文教你利用Python租到最合适的房子

    一文教你利用Python租到最合适的房子

    这篇文章主要为大家详细介绍了如何利用Python语言在爬取到房源数据后,挑选出符合自己要求的房子呢?感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • pyqt5+opencv 实现读取视频数据的方法

    pyqt5+opencv 实现读取视频数据的方法

    这篇文章主要介绍了pyqt5+opencv 实现读取视频数据的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 如何使用Python做个自定义动态壁纸

    如何使用Python做个自定义动态壁纸

    这篇文章主要介绍了如何使用Python做个自定义动态壁纸的相关资料,需要的朋友可以参考下方法
    2021-08-08
  • Python扩展内置类型详解

    Python扩展内置类型详解

    这篇文章主要为大家详细介绍了Python扩展内置类型的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python中的Logging模块在项目应用小结

    Python中的Logging模块在项目应用小结

    Python标准库中的logging模块为我们提供了强大而灵活的日志记录功能,本文将介绍如何使用logging模块,并探讨其在Python开发中的实际应用,感兴趣的朋友一起看看吧
    2024-04-04
  • python 求一个列表中所有元素的乘积实例

    python 求一个列表中所有元素的乘积实例

    今天小编就为大家分享一篇python 求一个列表中所有元素的乘积实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python 提取key 为中文的json 串方法

    python 提取key 为中文的json 串方法

    今天小编就为大家分享一篇python 提取key 为中文的json 串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python可视化神器pyecharts绘制桑基图

    Python可视化神器pyecharts绘制桑基图

    这篇文章主要介绍了Python可视化神器pyecharts绘制桑基图,即桑基能量分流图,也叫桑基能量平衡图,更多相关介绍具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Python函数中不定长参数的写法

    Python函数中不定长参数的写法

    今天小编就为大家分享一篇关于Python函数中不定长参数的写法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论