как добавить кнопку отправки в streamlit (кажется, что кнопка внутри кнопки сбрасывает все приложение. Почему?)
Когда я нажимаю кнопку ответа, оно обновляет все приложение. пожалуйста, посмотрите эту ссылку, чтобы узнать, чего я точно ожидаю, https://youtu.be/WO2mK1VnlZU. просто скачайте файл SessionState.py по этой ссылке (адаптировано из https://gist.github.com/tvst/036da038ab3e999a64497f42de966a92 93), чтобы импортировать SessionState Заранее спасибо
import streamlit as st
import SessionState
import random
import operator
def random_problem():
st.markdown("<h1 style = 'text-align:center; color:green;'>Simple Math</h1>", unsafe_allow_html=True)
session_state = SessionState.get(name = "", button_start = False)
session_state.name = st.text_input("Enter Your Name")
button_start = st.button('Start Game')
if button_start:
session_state.button_start = True
if session_state.button_start:
st.write("Welcome ", session_state.name)
session_state.operators = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv,
}
session_state.num1 = random.randint(1,10)
session_state.num2 = random.randint(1,10)
session_state.operation = random.choice(list(session_state.operators.keys()))
session_state.answer = session_state.operators.get(session_state.operation)(session_state.num1,session_state.num2)
st.write('What is:', session_state.num1, session_state.operation, session_state.num2,'?')
session_state.ans = st.text_input('Answer: ')
session_state.button_submit = st.button('Answer')
if session_state.button_submit:
if session_state.answer == session_state.ans:
st.write('Correct')
else:
st.write('Incorrect')
random_problem()
```[![when i click answer button it keep on refreshing whole app][1]][1]
[1]: https://stackru.com/images/5e44a7c25feb72c38b1b57df68da029c22095841.png
2 ответа
Вот как работает streamlit - каждый раз, когда вы меняете свой выбор (например, нажимаете кнопку), он снова запускает весь скрипт.
Но - вы можете использовать кеширование, чтобы кэшировать вещи, которые вам нужно вычислять снова и снова. Прочтите здесь о кешировании в streamlit - https://docs.streamlit.io/en/stable/caching.html
Для будущих ссылок у Streamlit теперь есть формы, которые будут ждать запуска кодов, пока не будет нажата кнопка отправки формы.
См. Сообщение в блоге Streamlit. https://blog.streamlit.io/introduction-submit-button-and-forms/