【发布时间】:2022-01-13 14:16:40
【问题描述】:
我想用我的 Streamlit 应用程序选择两个数字:a 和 b。 我想以两种不同的方式执行此操作,使用单选按钮选择它们。
首先,我希望能够选择预定义的数字组(“组”)。 一旦我选择了一个数字组,我希望之后能够单独调整“a”和“b”。
我的问题是: 一旦我完成“组”并单击“单独选择”,我的选择就会丢失,我会回到默认状态。 我的错误在哪里?
示例代码:
import streamlit as st
try:
num
except:
num = 0
try:
a
except:
a = 0
try:
b
except:
b = 500
range_a = range(0, 1000)
fix_a = [10, 50, 665]
range_b = range(500, 3333)
fix_b = [560, 2216, 2855]
group = [f"{num_temp}:{a_temp}:{b_temp}" for num_temp, (a_temp, b_temp) in enumerate(zip(fix_a, fix_b))]
rb = st.radio(label="How to select", options=['Group', 'Select individually'])
if rb == "Group":
num_name = st.selectbox("", options=group, index=num)
num, a, b = num_name.split(":", 2)
if rb == "Select individually":
a = st.number_input("a", value=a, min_value=range_a[0], max_value=range_a[-1])
b = st.number_input("b", value=b, min_value=range_b[0], max_value=range_b[-1])
st.write(f"{num}: A:{a}, B:{b}")
编辑 1:
import streamlit as st
if "num" not in st.session_state:
st.session_state['num'] = 0
if "a" not in st.session_state:
st.session_state['a'] = 0
if "b" not in st.session_state:
st.session_state['b'] = 500
range_a = range(0, 1000)
fix_a = [10, 50, 665]
range_b = range(500, 3333)
fix_b = [560, 2216, 2855]
group = [f"{num_temp}:{a_temp}:{b_temp}" for num_temp, (a_temp, b_temp) in enumerate(zip(fix_a, fix_b))]
rb = st.radio(label="How to select", options=['Group', 'Select individually'])
if rb == "Group":
num_name = st.selectbox("", options=group, index=int(st.session_state['num']))
st.session_state['num'], st.session_state['a'], st.session_state['b'] = num_name.split(":", 2)
if rb == "Select individually":
st.session_state['a'] = st.number_input("a", value=int(st.session_state['a']), min_value=range_a[0], max_value=range_a[-1])
st.session_state['b'] = st.number_input("b", value=int(st.session_state['b']), min_value=range_b[0], max_value=range_b[-1])
st.write(f"{st.session_state['num']}: A:{st.session_state['a']}, B:{st.session_state['b']}")
【问题讨论】: