Streamlit:选项不同时Session State未被尊重的组件行为差异问题
Streamlit单选框组件选项变更时的行为差异问题
Radio 1和Radio 2通过st.session_state将Option 2设为初始默认值。当通过按钮回调变更有效选项集时(两个选项集始终包含Option 2),Radio 2保留原有值,而Radio 1会重置为选项列表的第一个值。该问题同样存在于selectbox、pills等组件中,现附上代码、示例动图及环境信息,寻求行为差异的原因:
import streamlit as st options = { 'sel1': [ ['Option 1', 'Option 2'], ['Option 1', 'Option 2', 'Option 3'], ['Option 1', 'Option 2', 'Option 3', 'Option 4'] ], 'sel2': [ ['Option 1', 'Option 2', 'Option 3', 'Option 4'], ['Option 1', 'Option 2', 'Option 3', 'Option 4'], ['Option 1', 'Option 2', 'Option 3', 'Option 4'] ] } def showRadio(stCol, radioId): with stCol: st.metric( f'Radio {radioId}', st.radio( label='With different options across runs', options=options[f'sel{radioId}'][st.session_state.idx], index=0, key=f'radio{radioId}' ) ) def updateDIdx(): 'Update the session_state.idx upon button click in callback' st.session_state.idx = (st.session_state.idx + 1) % 3 def showButton(stCol): with stCol: st.button('Change Options', on_click=updateDIdx) st.metric('Options Index: ', st.session_state.idx) def radio(): '''The main function''' st.set_page_config(page_title="Radio Example") # Set the session_state on first run if 'idx' not in st.session_state: st.session_state.idx = 0 if 'radio1' not in st.session_state: st.session_state.radio1 = 'Option 2' if 'radio2' not in st.session_state: st.session_state.radio2 = 'Option 2' cols = st.columns(3) showRadio(cols.pop(0), 1) showRadio(cols.pop(0), 2) showButton(cols.pop(0)) if __name__ == '__main__': radio()

环境信息
- Streamlit版本:1.44.0
- Python版本:3.12
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

