Кнопка 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 при каждом нажатии кнопки.

Другие вопросы по тегам