【问题标题】:streamlit widget dependency流光小部件依赖
【发布时间】:2021-02-05 22:59:48
【问题描述】:

我正在尝试两个小部件的简单概念,其中一个依赖于另一个

我想让用户点击一个按钮,打开一个数字滑块。然后用户可以选择 通过数字滑块的数字。

这是我正在使用的代码

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 会重新运行整个事情,并且必须再次按下“按钮”才能返回数字滑块。最终,数字滑块永远不会改变

【问题讨论】:

    标签: python streamlit


    【解决方案1】:

    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)

    需要考虑的一些额外事项:

    1. 如果您希望输入的数字保证直接显示在按钮下方,则需要在脚本顶部附近创建一个占位符:
      btn = st.empty()
      nmb = st.empty()
    

    这保证nmb 将直接出现在btn 下方。当你定义你的小部件时,而不是调用st.button(...) 你调用btn.button(...)。

    1. 如果你想创建一个切换按钮(当你再次点击它时,数字输入会消失),你可以使用
      if press_button:
          is_pressed.update({"pressed": not is_pressed["pressed"]})
    
    1. 如果您希望按钮在按下后消失,请使用
      if is_pressed["pressed"]:f
          btn.empty()
          th = nmb.number_input(...)
    

    【讨论】:

      【解决方案2】:

      似乎有一种解决方法,因为按钮小部件返回一个布尔值。 当我使用复选框时,我得到了我想要的:

      import streamlit as st
          press_button = st.checkbox("Press it Now!")
          if press_button :
              # ask for the value
              th = st.number_input("Please enter the values from 0 - 10",)
      

      【讨论】:

      • 这没有回答问题。如果按钮未被按下,'th' 被重置为默认值
      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 2019-06-05
      • 2017-05-28
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多