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

