python - 流光小部件依赖
问题描述
我正在尝试两个小部件的简单概念,其中一个依赖于另一个
我想让用户点击一个按钮,打开一个数字滑块。然后,用户可以选择通过数字滑块选择数字。
这是我正在使用的代码
import streamlit as st
press_button = st.button("Press it Now!")
if press_button :
# ask for the value
th = st.number_input("Please enter the values from 0 - 10",)
我面临的问题是,当我更改数字滑块的值时,streamlit 会重新运行整个事情,并且必须再次按下“按钮”才能返回数字滑块。最终,数字滑块永远不会改变
解决方案
Streamlit 会在每次发生操作时重新运行脚本:按下按钮、输入数字等。要保存值,请使用缓存函数在运行之间维护值。
我很确定这就是你想要的:
import streamlit as st
# Keep the state of the button press between actions
@st.cache(allow_output_mutation=True)
def button_states():
return {"pressed": None}
press_button = st.button("Press it Now!")
is_pressed = button_states() # gets our cached dictionary
if press_button:
# any changes need to be performed in place
is_pressed.update({"pressed": True})
if is_pressed["pressed"]: # saved between sessions
th = st.number_input("Please enter the values from 0 - 10")
注意:您说您想要一个滑块,但后来您使用了数字输入。如果您真的想要一个数字滑块,请使用
st.slider("Select a Number", min_value=1, max_value=10, step=1)
需要考虑的一些额外事项:
- 如果您希望数字输入保证直接显示在按钮下方,则需要在脚本顶部附近创建一个占位符:
btn = st.empty()
nmb = st.empty()
这保证nmb
将直接出现在btn
. 当你定义你的小部件时,而不是打电话给st.button(...)
你 call btn.button(...)
。
- 如果您想创建一个切换按钮(当您再次单击它时,数字输入消失),您可以使用
if press_button:
is_pressed.update({"pressed": not is_pressed["pressed"]})
- 如果您希望按钮在按下后消失,请使用
if is_pressed["pressed"]:f
btn.empty()
th = nmb.number_input(...)
推荐阅读
- sql - 仅用于过滤某些类型的列的附加条件
- xamarin - 在 Xamarin.Forms (iOS) 中的 Firebase Analytics 中安装时,本机链接失败
- css - 仅将 Bootstrap 用于其表单样式
- c# - 如何从 C# Web API 返回从 SQL Server 存储过程获取 JSON 结果的 JSON 结果?
- python-3.x - 二值图像分类器总是预测一个类别
- rabbitmq - 更改 Erlang cookie 后名称为“rabbit”的节点已在运行
- roslyn - Project.ProjectReferences 不显示项目而不是项目依赖项列表
- node.js - 如何在 clojure ring 中使用 node.js 库和 API?
- c# - Couchbase.Lite 无法复制
- swap - 如何使用 cloud-init 配置交换分区?