You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:20