St.container and session state

I am struggling to understand why my code does not work. Am I misunderstanding something about session_state?

The code below starts fine, and I can press the button once to add text to the container. The second time I press the button I get this error message:

Bad message format
Bad ‘setIn’ index 4 (should be between [0, 2])

def write_to_container():
    st.session_state.my_container.write("Hello from method")


st.button("Append to container", on_click=write_to_container)
if "my_container" not in st.session_state:
    st.session_state["my_container"] = st.container(border=True)
st.session_state.my_container.write("Hello")

Streamlit version: 1.39.0
Python: 3.11.5

I don’t think that can work. You must actually call st.container() if you want a container to be there. You can do this instead:

import streamlit as st


def insert_text():
    st.session_state.my_text.insert(0, "Hello from method")


if "my_text" not in st.session_state:
    st.session_state.my_text = ["Hello"]

st.button("Append to container", on_click=insert_text)
with st.container(border=True):
    for line in st.session_state.my_text:
        st.write(line)
1 Like

Thanks a lot. This works! I don’t fully understand the session_state. My attempt was able to append one time, so it did work for the first attempt. Got some reading to do on the session_state object.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.