import streamlit as st
if not st.session_state.get('total'):
st.session_state['total'] = 10
if not st.session_state.get('a'):
st.session_state['a'] = 1
if not st.session_state.get('b'):
st.session_state['b'] = 1
def update_remain_point(n):
print(f'cur_{n}')
if f'cur_{n}' in st.session_state:
cur_point = st.session_state[f'cur_{n}']
new_total = cur_point - st.session_state[n]
st.session_state['total'] -= new_total
st.session_state[n] = cur_point
st.write('remain:', st.session_state.get('total'))
for n in ['a', 'b']:
st.session_state[n] = st.number_input(n, min_value=1.0, max_value=10.0, step=1.0, on_change=lambda: update_remain_point(n), key=f'cur_{n}')
It looks like this. What I want to achieve is
- every time I click
+
button ofa
orb
, theremain
will
reduce1
- every time I click
-
button ofa
orb
, theremain
will
add1
In this example, only when I click +
and -
of b
works.
You can see I do print(f'cur_{n}')
in the code and I found that no matter I click +
and -
of a
or b
, it always print cur_b
.
Why does this happen? I think when I click a
's +
and -
, it should print cur_a
.
Seems like the last number_input
kills all other number_input
. Plz help me with this. Thank u guys.