如何制作相互交互的 streamlit 小部件以存储以前的输入?
How to make streamlit widgets that interact with each other to store previous input?
我正在尝试在 streamlit 中制作一个页面,其中我有两个多 select 小部件 select 在州和城市之间。
首先用户需要选择州,然后只有属于该州的城市才会出现在 selection 中。到目前为止,还不错。
当我已经 select 编辑了一些城市,但随后我尝试选择另一个州时,问题就出现了。当我这样做时,我的城市小部件被清除干净,然后我必须再次选择所有城市。
当用户选择其他州时,城市小部件会重置
for uf, cidade, ciclo in lista_cidades:
if uf in uf_dict:
uf_dict[uf].append(cidade)
else:
uf_dict[uf]=[cidade]
st.multiselect('Selecione o estado', sorted(uf_dict), key='UF')
for uf in st.session_state.UF:
for city in uf_dict[uf]:
city_list.append(city)
st.multiselect('Selecione a cidade', sorted(city_list), key='cities')
for city in st.session_state.cities:
for k, v in uf_dict.items():
if city in v:
st.session_state.cities_selected.append((k, city))
uf_dict 变量看起来像这样
uf_dict = {
"AM": [
"MANAUS",
"ITACOATIARA"
],
"GO": [
"JATAI",
"MINEIROS",
"FORMOSA",
"INHUMAS",
"ITABERAÍ",
"JARAGUÁ"
]
}
有什么方法可以保存之前select的城市,这样我就不用重新选择了?
我实际上设法找到了解决方案。
首先我创建了这个回调函数:
def callback(state, object):
st.session_state[f'{state}'] = object
然后我使用了这个代码:
if (
st.button('EXECUTE', on_click=callback, args=('execute', True))
or st.session_state.execute == True
):
st.warning('Are you sure you want to execute this?')
if st.button('YES'):
st.write('You did it!')
当我点击'EXECUTE'按钮时,我调用回调函数,然后我可以执行另一个命令。
这是结果:
我正在尝试在 streamlit 中制作一个页面,其中我有两个多 select 小部件 select 在州和城市之间。
首先用户需要选择州,然后只有属于该州的城市才会出现在 selection 中。到目前为止,还不错。
当我已经 select 编辑了一些城市,但随后我尝试选择另一个州时,问题就出现了。当我这样做时,我的城市小部件被清除干净,然后我必须再次选择所有城市。
当用户选择其他州时,城市小部件会重置
for uf, cidade, ciclo in lista_cidades:
if uf in uf_dict:
uf_dict[uf].append(cidade)
else:
uf_dict[uf]=[cidade]
st.multiselect('Selecione o estado', sorted(uf_dict), key='UF')
for uf in st.session_state.UF:
for city in uf_dict[uf]:
city_list.append(city)
st.multiselect('Selecione a cidade', sorted(city_list), key='cities')
for city in st.session_state.cities:
for k, v in uf_dict.items():
if city in v:
st.session_state.cities_selected.append((k, city))
uf_dict 变量看起来像这样
uf_dict = {
"AM": [
"MANAUS",
"ITACOATIARA"
],
"GO": [
"JATAI",
"MINEIROS",
"FORMOSA",
"INHUMAS",
"ITABERAÍ",
"JARAGUÁ"
]
}
有什么方法可以保存之前select的城市,这样我就不用重新选择了?
我实际上设法找到了解决方案。
首先我创建了这个回调函数:
def callback(state, object):
st.session_state[f'{state}'] = object
然后我使用了这个代码:
if (
st.button('EXECUTE', on_click=callback, args=('execute', True))
or st.session_state.execute == True
):
st.warning('Are you sure you want to execute this?')
if st.button('YES'):
st.write('You did it!')
当我点击'EXECUTE'按钮时,我调用回调函数,然后我可以执行另一个命令。
这是结果: