Streamlit 多个嵌套按钮,不起作用

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

我正在尝试实现streamlit UI和两个互斥的操作按钮。每个操作都有嵌套的流线型按钮。按钮的行为应该就像我单击一个按钮一样,而不是另一个按钮应该被重置,而且如果我重复单击按钮,该特定按钮的操作和嵌套按钮应该是可见的并且仅适用于该特定按钮。 我尝试了多种方法。我使用 st.session 状态解决了嵌套按钮问题。但是当我在单击第一个按钮后选择第二个按钮时,第一个按钮的内容仍然存在,这是我不期望的。反之亦然。 请帮我解决这个问题

sideb=st.sidebar
button1 = sideb.button('Single')
if st.session_state.get('button') != True:

    st.session_state['button'] = button1 # Saved the state

if st.session_state['button'] == True:

    st.write("button1 is True")

    option=st.selectbox('Select App?',
            ('A', 'B', 'C'),index=0)

     
    st.write('You selected:', option)
    option=option.lower()
    ''''SOME CHATTING APP WITHOUT ANY BUTTON '''
button2 = sideb.button('Multiple Queries')
if st.session_state.get('button2') != True:

    st.session_state['button2'] = button2 # Saved the state

if st.session_state['button2'] == True:
    uploaded_file = st.file_uploader("Choose a file with app_name and list_of questions.", type=['xlsx'], accept_multiple_files=False)
    st.write("button2 is True")
    if uploaded_file is not None:
        stqdm.pandas()
        df=pd.read_excel(uploaded_file)
    if st.button('Generate'):
        st.write("Do your logic here")
     
        with st.spinner('Wait for it...'):
            df['Answers']=df.progress_apply(qs, axis=1)
            AgGrid(df)
        st.success('Done!')
        csv = convert_df(df)
        download2 = st.download_button(
            label="Download Answers",
            data=csv,
            file_name='Answers.csv',
            key='download-csv'
        )
python nested streamlit
1个回答
0
投票

我不是100%符合你的意图,但根据我的理解,我相信你想要实现某种转变行为。在 Streamlit 中,最简单、最简洁的方法是通过在按钮上实现回调来更改会话的状态。回调是单击按钮时触发的函数。

import streamlit as st

if 'button1' not in st.session_state:
    st.session_state['button1'] = False

if 'button2' not in st.session_state:
    st.session_state['button2'] = False

def switch_button1_state():
    st.session_state['button1'] = True
    st.session_state['button2'] = False

def switch_button2_state():
    st.session_state['button1'] = False
    st.session_state['button2'] = True

sideb=st.sidebar
button1 = sideb.button('Single', on_click=switch_button1_state)
button2 = sideb.button('Multiple Queries', on_click=switch_button2_state)


if st.session_state['button1'] == True:
    st.write("Single logic here")

if st.session_state['button2'] == True:
    st.write("Multiple Queries logic here")

每次单击按钮时,都会以互斥的方式翻转两个按钮的状态,从而允许控制流显示一个分支或另一个分支,但不能同时显示两个分支。如果这不是预期的最终结果,请提供说明。

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