在 Streamlit 的复选框中选择多个选项

问题描述 投票:0回答:3

我是 Streamlit 的新手。我想进行多项选择用户输入(复选框)。但我想从 4 个选项中最多选择 3 个。

我尝试过

multiselect
的下拉功能。

import streamlit as st
option = st.multiselect('Select three known variables:', ['initial velocity (u)', 'final velocity (v)', 'acceleration (a)', 'time (t)'])  

它有效。但我认为这对于我的情况来说并不方便。另外,这里我无法将选择限制为 4 个中的 3 个。用户可以在此处选择所有 4 个选项。但我想要的代码是,如果选择了第四个选项,则前一个选择(第三个选项)将被自动取消选择。我更喜欢复选框的外观,例如

radio
按钮:

import streamlit as st
option = st.radio('Select three known variables:', ['initial velocity (u)', 'final velocity (v)', 'acceleration (a)', 'time (t)'])  

但是使用

radio
,我无法选择多个选项。我如何编辑它,以便将其显示为复选框并且只能选择 3 个选项?

python button checkbox radio-button streamlit
3个回答
5
投票

这在视觉上最接近您想要的,因为它们实际上是复选框,而不是单选按钮。但您无法限制所选选项,因此可以检查所有选项。

st.write('Select three known variables:')
option_1 = st.checkbox('initial velocity (u)')
option_2 = st.checkbox('final velocity (v)')
option_3 = st.checkbox('acceleration (a)')
option_4 = st.checkbox('time (t)')

作为一种解决方法,您可以按以下方式使用单选按钮,因为它们仅允许检查一个组合:

option = st.radio('Select three known variables:',
                  ['initial velocity (u), final velocity (v), acceleration (a)',
                   'initial velocity (u), final velocity (v), time (t)',
                   'initial velocity (u), acceleration (a), time (t)',
                   'final velocity (v),acceleration (a), time (t)'])


2
投票

我还没有找到任何

streamlit
功能可以正确满足我的需求。因此,我按照
anilewe
建议使用函数 streamlit.checkbox 并添加一些额外的条件语句,以便用户必须选择任意 3 个复选框。 这是我的代码:

import streamlit as st
st.write('Select three known variables:')
option_s = st.checkbox('displacement (s)')
option_u = st.checkbox('initial velocity (u)')
option_v = st.checkbox('final velocity (v)')
option_a = st.checkbox('acceleration (a)')
option_t = st.checkbox('time (t)')
known_variables = option_s + option_u + option_v + option_a + option_t

if known_variables <3:
    st.write('You have to select minimum 3 variables.')
elif known_variables == 3:
   st.write('Now put the values of your selected variables in SI units.')
else:
    st.write('You can select maximum 3 variables.')

更新:创建字典可以更加自动化和有用;如果将方法从

st.checkbox
更改为其他方法,也很有帮助:

import streamlit as st
st.write('Select three known variables:')
opts = [ ('s', 'displacement'), ('u', 'initial velocity'), ('v', 'final velocity'), ('a', 'acceleration'), ('t', 'time') ]
known_variables = {symbol: st.checkbox(f"{name} ({symbol})") for symbol, name in opts}    

if sum(known_variables.values()) < 3:
    st.write('You have to select minimum 3 variables.')
elif sum(known_variables.values()) == 3:
    st.write('Now put the values of your selected variables in SI units.')
else:
    st.write('You can select maximum 3 variables.')

仍然,我希望获得一个看起来像

checkbox
radio
按钮的功能,但具有内置功能来限制特定数量的选择。总之,我认为我想要的功能可以称为“multiselect-radio”。因此我不会自己设置额外的条件来限制选择。


0
投票

考虑使用

st.multiselect
和参数
max_selections=3

import streamlit as st

st.multiselect(
    "Select three known variables:",
    ["initial velocity (u)", "final velocity (v)", "acceleration (a)", "time (t)"],
    max_selections=3,
)

© www.soinside.com 2019 - 2024. All rights reserved.