I want to create an “Add Row” button that, when clicked, will display a text input field and a “Remove Row” button. When the “Remove Row” button is clicked, the input field and the button itself will be removed from the page.
counter = st.session_state.get(‘counter’, 0)
but = st.button(“Добавить строку”)
if but:
counter += 1
st.session_state[‘counter’] = counter
text_entries = []
for i in range(counter):
text_entries.append(st.text_input(f"string{i + 1}"))
delete = st.button(f"delete string{i + 1}")
Hi there!
I believe you are looking for something like this:
import streamlit as st
if 'counter' not in st.session_state:
st.session_state['counter']=0
button_grid = st.columns(2)
with button_grid[0]:
if st.button('Add row'):
st.session_state['counter']+=1
with button_grid[1]:
if st.button('Remove row'):
st.session_state['counter']-=1
number_inputs = st.session_state['counter']
grid=st.columns(2)
with grid[0]:
input_values = [st.text_input(f'Input field '+str(i), key=f"text_input_{i}")
for i in range(number_inputs)]
with grid[1]:
input_values1 = [st.text_input(f'Input field 2', key=f"amt1{i}")
for i in range(number_inputs)]
This will create an add row and a remove row button.
When I had this problem, I used a number input to decide the number of rows:
import streamlit as st
number_inputs = st.number_input('number of input fields',min_value=1, max_value=10)
grid=st.columns(2)
with grid[0]:
input_values = [st.text_input(f'Input field '+str(i), key=f"text_input_{i}")
for i in range(number_inputs)]
with grid[1]:
input_values1 = [st.text_input(f'Input field 2', key=f"amt1{i}")
for i in range(number_inputs)]
This allows the user to directly specify the number of input fields.