我正在开发一个Gradio应用程序。
服务器端处理可能需要很长时间,因此我希望能够实现一个消息传递范例,根据处理状态更新用户界面。
动态设置组件的值不起作用(没有错误,只是没有更新)。
from time import sleep
import gradio as gr
import numpy as np
from gradio.components import Button, Image, Markdown, Textbox
def transform(component):
def _transform(text):
for i in range(5):
component.update(value=str(i))
sleep(1)
return np.random.randint(0, 230, (100, 100, 3))
return _transform
with gr.Blocks() as app:
inp = Textbox(label="Your message")
out = Image(label="Your transformed message")
feedback = Markdown(value="Initial")
btn = Button("See for yourself!", label="Run")
btn.click(transform(feedback), inputs=inp, outputs=out)
app.launch()在这里,您可以看到“初始值”仍然存在,而不是"4“。

发布于 2022-10-26 19:43:54
您可以通过将您的函数转换为生成器来实现这一点。基本上,只需将return关键字更改为yield。您还需要启用.queue()。
这一守则应适用于:
import gradio as gr
from gradio.components import Markdown, Textbox, Button
from time import sleep
def transform(component):
for i in range(5):
yield str(i)
sleep(3)
yield f"text -- {i}"
with gr.Blocks() as app:
inp = Textbox(label="Your message")
out = Textbox(label="Your transformed message")
feedback = Markdown("Initial")
btn = Button("See for yourself!", label="Run")
btn.click(transform, inputs=inp, outputs=out)
app.queue()
app.launch()https://stackoverflow.com/questions/74211548
复制相似问题