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

Gradio 5.0.2:如何在Python后端接收gr.Image的start_recording事件

解决Gradio自定义Image组件获取start_recording事件的问题

错误原因分析

你遇到的AttributeError: 'tuple' object has no attribute 'start_recording',大概率是自定义组件的EVENTS属性定义错误,或者组件实例化时误将组件包装成了元组(比如用了img, = MyImage(...)这种写法)。

具体解决步骤

  • 正确定义自定义组件
    继承gr.Image时,要确保EVENTS是在原组件事件基础上添加新事件的元组(Gradio组件的EVENTS是元组类型,不能直接修改,需生成新元组):

    import gradio as gr
    from gradio.components import Events
    
    class MyImage(gr.Image):
        # 继承原Image的所有事件,添加start_recording事件
        EVENTS = gr.Image.EVENTS + (Events.start_recording,)
    
  • 正确绑定事件
    在Blocks中实例化组件时,直接赋值给变量,不要将组件转为元组,然后绑定start_recording事件:

    def handle_recording_start():
        print("摄像头录制已启动")
        return "录制开始"
    
    with gr.Blocks() as demo:
        # 指定source为webcam,开启streaming确保录制功能正常
        webcam = MyImage(source="webcam", streaming=True)
        # 绑定start_recording事件到处理函数
        webcam.start_recording(fn=handle_recording_start)
        demo.launch()
    
  • 环境与版本检查

    • 升级Gradio到最新版本,确保start_recording事件被支持:
      pip install --upgrade gradio
      
    • 若前端加载异常,删除项目根目录下的.gradio文件夹,重新启动demo,让Gradio重新安装前端依赖。

验证方法

启动demo后,在网页中点击摄像头组件的「开始录制」按钮,查看Python控制台是否打印"摄像头录制已启动",同时页面是否返回"录制开始"的反馈,以此确认事件已被后端正确捕获。

内容的提问来源于stack exchange,提问作者x y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:52:07