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

Gradio Dataset显示图片报错:'Image'对象无proxy_url属性

问题:Gradio Dataset显示图片时出现AttributeError错误

尝试在Gradio Dataset的行中显示图片时,触发错误:AttributeError: 'Image' object has no attribute 'proxy_url',该错误源于Gradio内部实现。

环境版本

Python 3.11.11
Gradio 5.23.3

报错堆栈

File "src/test_001.py", line 18, in show_startup_quotes
    return gr.Dataset(
           ^^^^^^^^^^^
  File ".venv/lib/python3.11/site-packages/gradio/component_meta.py", line 182, in wrapper
    return fn(self, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File ".venv/lib/python3.11/site-packages/gradio/components/dataset.py", line 86, in __init__
    self.component_props = [
                           ^
  File ".venv/lib/python3.11/site-packages/gradio/components/dataset.py", line 88, in <listcomp>
    component.get_config(),
    ^^^^^^^^^^^^^^^^^^^^^^
  File ".venv/lib/python3.11/site-packages/gradio/components/base.py", line 245, in get_config
    config = super().get_config()
             ^^^^^^^^^^^^^^^^^^^^
  File ".venv/lib/python3.11/site-packages/gradio/blocks.py", line 266, in get_config
    config = {**config, "proxy_url": self.proxy_url, "name": self.get_block_class()}

复现代码

import gradio as gr
from PIL import Image

white_image = Image.new("RGBA", (16, 16), color=(0, 0, 0, 0))
red_image = Image.new("RGBA", (16, 16), color=(255, 0, 0, 255))

philosophy_quotes = [
    [white_image, "I think therefore I am."],
    [white_image, "The unexamined life is not worth living."]
]

startup_quotes = [
    [red_image, "Ideas are easy. Implementation is hard"],
    [red_image, "Make mistakes faster."]
]

def show_startup_quotes():
    return gr.Dataset(
        samples=startup_quotes,
        components=[
            gr.Image(type="pil"),
            gr.Text()
        ])

with gr.Blocks() as demo:
    textbox = gr.Textbox()
    image = gr.Image(visible=False,type="pil")
    dataset = gr.Dataset(components=[textbox, image], samples=philosophy_quotes)
    button = gr.Button()

    button.click(show_startup_quotes, None, dataset)

demo.launch()

解决提示

  • 不要在回调函数中返回新的Dataset组件:Gradio的回调函数不应直接返回组件实例,而是应该更新现有组件的属性(比如samples)。原代码中show_startup_quotes试图返回新的gr.Dataset,这会导致未挂载的组件(gr.Image和gr.Text)缺少proxy_url属性,因为该属性只有组件被添加到Blocks后才会生成。
  • 修改回调逻辑,仅更新samples参数:将回调函数改为返回新的samples数据,而非新组件。调整后的代码示例:
    def show_startup_quotes():
        return startup_quotes
    
    with gr.Blocks() as demo:
        textbox = gr.Textbox()
        image = gr.Image(visible=False,type="pil")
        dataset = gr.Dataset(components=[image, textbox], samples=philosophy_quotes)  # 注意组件顺序要和samples匹配
        button = gr.Button()
    
        button.click(show_startup_quotes, None, dataset)
    
  • 确保组件顺序与samples一致:原代码中Dataset的components顺序是[textbox, image],但samples中是[图片, 文本],顺序不匹配会导致显示异常,需调整为[image, textbox]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:52:45