Кнопка Streamlit работает только один раз
Я хочу создать простое приложение с оптимизированной подсветкой, которое при нажатии кнопки увеличивает x и показывает новое значение x.
Однако он работает только в первый раз: "x показывает только значение 2 и не увеличивается"
import streamlit as st
x = 1
if st.button("Increment x"):
x=x+1
st.text(x)
3 ответа
https://gist.github.com/tvst/036da038ab3e999a64497f42de966a92
Эй, этот пакет творил для меня чудеса.
Загрузите код в ту же папку, над которой вы работаете, и бум:
import SessionState
ss = SessionState.get(x=1)
if st.button("Increment x"):
ss.x = ss.x + 1
st.text(ss.x)
Streamlit повторно запускает скрипт веб-страницы каждый раз, когда вы вносите изменения / взаимодействия. Таким образом, каждый раз, когда вы нажимаете кнопку, он сбрасывает x=1, а затем добавляет 1 к x.
Ваша кнопка работает правильно, проблема в том, как streamlit обрабатывает события. Вы можете попробовать использовать st.cache, чтобы обойти это, но я никогда не пытался воспроизвести то, к чему вы стремитесь.
Состояние сеанса Streamlit позволяет увеличивать значение одним нажатием кнопки.
import streamlit as st
btn = st.button("Press Me")
if btn:
if 'x' in st.session_state.keys():
st.session_state['x']=st.session_state['x']+1
else:
st.session_state['x']=1
if 'x' in st.session_state.keys():
st.write(st.session_state['x'])
X будет увеличиваться на 1 при каждом нажатии кнопки.