Reusing code in columns

I have a basic app where I need to use the same logic twice for two different purposes. My approach is:

import streamlit as st
import random


def col_content(col, base_key):
    return col.number_input("Some label", key=f"{base_key}_{random.randint(1,1000)}")


col1, col2 = st.columns(2)

col1_content = col_content(col1, "foo")
col2_content = col_content(col2, "bar")

st.write(col1_content)
st.write(col2_content)

The problem is that the values of col1_content and col2_content are always 0.0. In the app I can change the values in the two input fields but they are reseted immediately and ultimately it doesn’t work.

What am I missing here? I guess it has to do somehow with the context/session but I don’t know how…

Thanks in advance for your help!

I think I figured out the problem… The randomized key causes the problem. By providing a more consistent key, I can achieve the desired behavior.

I still have though one open question. What type hint should I give to the col argument so it’s understood correctly by my IDE?

Hi @drorata

On using the st.columns(), here’s a short code snippet:

col1, col2 = st.columns(2)

...(Define contents for col1_content and col2_content)...

with col1:
   st.write(col1_content)
with col2:
   st.write(col2_content)

For more examples and info, check out the Docs page: