streamlight button on_click没有从API Endpoint URL刷新图像



我是新来的流光,我试图建立一个简单的应用程序,将显示从https://cataas.com/cat上点击一个按钮猫的图片。我有以下简单的代码:

def show_kitty():
st.image('https://cataas.com/cat')
st.button("Click for cats", on_click = show_kitty())

但是,应用程序在第一次点击按钮时呈现图片,并且在后续点击时图片不会改变。

我尝试对文本而不是图像做同样的事情,这次显示的是猫的事实:

def get_cat_fact():
x = requests.get('https://catfact.ninja/fact')
st.text(x.text)
st.button("Click for cat facts", on_click = get_cat_fact())

,它工作-文本变化的每一个按钮点击。

有谁知道这是为什么吗?我怎么能使流光刷新图像?

可能st.image()正在缓存结果,这意味着每当您使用相同的输入参数调用它时,它将简单地获取与以前相同的结果。

你应该让它显式:

import requests
def show_kitty():
image = requests.get("https://cataas.com/cat").content
st.image(image)
st.button("Click for cats", on_click=show_kitty)

我认为正确的实现是:

import requests
def show_kitty():
image = requests.get("https://cataas.com/cat").content
st.image(image)
if st.button("Click for cats"):
show_kitty()

你必须考虑稀疏的代码像UI的主要规范,并进入回调,如果你需要你可以改变全局变量的状态(这里的例子),而不直接改变UI的元素。我认为这是最好的做法。

最新更新