I am building an app in which I show a dataframe containing outfit items chosen for the user. I also want to give the user the option to change certain items from said dataframe. Here is how i build the list of items:
items = list() if (outfit.coat != None): items.append(outfit.coat) if (outfit.top2 != None): items.append(outfit.top2) items.append(outfit.top1) items.append(outfit.bottom) items.append(outfit.footwear) st.dataframe(database.iloc[items])
and here is the part where I want to give the user the option of changing the items out:
with st.expander("Change outfit elements"): with st.form("Outfit items"): options = st.multiselect('Which items do you wish to change?',database.iloc[items]) st.write('You selected:', options) submitted = st.form_submit_button("Change") if submitted: st.write("Outfit was changed to:") st.dataframe(database.iloc[items])
My problem is that when the submit button is clicked, a rerun occurs and another outfit is chosen, making the selection process useless as the options in the multiselect widget disappear (as they are not there anymore when a new outfit is chosen)
How can I use session states to circumvent this? I have tried:
if 'items' not in st.session_state: st.session_state.items = list() if (outfit.coat != None): st.session_state.items.append(outfit.coat) if (outfit.top2 != None): st.session_state.items.append(outfit.top2) st.session_state.items.append(outfit.top1) st.session_state.items.append(outfit.bottom) st.session_state.items.append(outfit.footwear) st.dataframe(database.iloc[st.session_state.items])
but i get the error "AttributeError: ‘function’ object has no attribute ‘append’ "