Streamlit 按钮 on_click 不刷新来自 API 端点 URL 的图像
Streamlit button on_click not refreshing images from API Endpoint URL
我是 Streamlit 的新手,我正在尝试构建一个简单的应用程序,它会在单击按钮时显示来自 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())
它起作用了 - 每次单击按钮时文本都会改变。
有人知道这是为什么吗?如何让 Streamlit 刷新图像也一样?
可能 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的主要规范一样考虑稀疏代码,如果你需要进入回调你可以改变全局变量(example here)的状态而不直接改变元素UI。我认为这是最佳做法。
我是 Streamlit 的新手,我正在尝试构建一个简单的应用程序,它会在单击按钮时显示来自 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())
它起作用了 - 每次单击按钮时文本都会改变。
有人知道这是为什么吗?如何让 Streamlit 刷新图像也一样?
可能 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的主要规范一样考虑稀疏代码,如果你需要进入回调你可以改变全局变量(example here)的状态而不直接改变元素UI。我认为这是最佳做法。