Hi Streamlit Community!
I try to build a LMS for an EdTech Project.
Now i have the following problem:
I want to show the questions only after the learner pressed on the button. So far so good⊠However, when i enter one answer for the first input field, die script re-starts. I know, that it has something to do with the session_state command and using the on_change command to solve this problem.
I already watched the tutorial in the docs, but so far i canât find the solution.
I managed to show the questions after pressing the button. But after i type in one answer in a input_field, i get the usual error âAttributeErrorâ message, that i didnât initialized the session_state.
This is my code:
import streamlit as st
#Initialize Input Fields
if âmcquest_1â in st.session_state:
st.session_state.mcquest_1 == ââif âdeepmcquest_1â in st.session_state:
st.session_state.deepmcquest_1 == ââif ânormalquest_1â in st.session.state:
st.session_state.normalquest_1 == ââif âone_quest_1â in st.session_state:
st.session_state.one_quest_1 = ââif âdeeponequest_1â in st.session_state:
st.session_state.deeponequest_1 = ââdef read_change():
st.write(st.session_state.mcquest_1)
st.write(st.session_state.deepmcquest_1)
st.write(st.session_state.normalquest_1)
st.write(st.session_state.one_quest_1)
st.write(st.session_state.deeponequest_1)#Multiple Choice Answers
mcquest = st.multiselect(âDas ist eine spezielle Frage?â,
[âBegriff1â, âBegriff2â, âBegriff3â, âBegriff4â, âBegriff5â,
âBegriff6â, âBegriff7â, âBegriff8â, âBegriff9â, âBegriff10â],
help=âErst wenn alle richtige Begriffe ausgewĂ€hlt wurden, erscheint die Lösung.â,
on_change=read_change, key=âmcquest_1â)if mcquest == [âBegriff1â, âBegriff2â]:
st.success(âDas ist die richtige Antwort.â)
deepmcquest = st.text_input(âWarum ist diese Antwort richtig?â, key=âdeepmcquest_1â,
help=âDiese Frage dient zur weiteren Festigung des Gelernten.â,
on_change=read_change)
if deepmcquest != ââ:
st.write(âIhre ErklĂ€rung:â)
st.info(deepmcquest)
st.write(âUnsere ErklĂ€rung:â)
st.success(âDas ist eine richtige Antwort.â)
else:
st.warning(âNoch keine Antwort gegeben.â)
else:
st.warning(âWĂ€hle die richtigen Antworten aus.â)
st.text(ââ)
st.markdown(â***â)#Long text Answer
normalquest_1 = st.text_input(âWarum ist diese Frage so wie sie ist?â, key=ânormalquest_1â,
help=âNach Eingabe der Antwort erscheint eine mögliche Lösung.â,
on_change=read_change)
if normalquest_1 != ââ:
st.write(âIhre Antwort:â)
st.info(normalquest_1)
st.write(âUnsere Antwort:â)
st.success(âDas ist unsere ErklĂ€rung.â)
else:
st.warning(âNoch keine Antwort gegeben.â)
st.text(ââ)
st.markdown(â***â)#One short Question Answer
onequest_1 = st.radio(âDas ist eine MC Frage?â, [âAntwort auswĂ€hlen â, âDas ist eine mögliche Antwortâ,
âDas ist eine mögliche Antwort2â,
âDas ist eine mögliche Antwortâ,
âDas ist eine mögliche Antwortâ,
âDas ist eine mögliche Antwortâ],
help=âBitte wĂ€hle die richtige Antwort aus.â,
on_change=read_change, key=âone_quest_1â)
if onequest_1 == âDas ist eine mögliche Antwort2â:
st.success(âDas ist die richtige Antwort.â)
deeponequest = st.text_input(âWarum ist diese Antwort richtig?â, key=âdeeponequest_1â,
help=âDiese Frage dient zur weiteren Festigung des Gelernten.â,
on_change=read_change)
if deeponequest != ââ:
st.write(âIhre ErklĂ€rung:â)
st.info(deeponequest)
st.write(âUnsere ErklĂ€rung:â)
st.success(âDas ist unsere ErklĂ€rung.â)
else:
st.warning(âNoch keine Antwort gegeben.â)
elif onequest_1 == âAntwort auswĂ€hlen â:
st.warning(âNoch keine Antwort gegebenâ)
elif onequest_1 != âDas ist eine mögliche Antwort2â:
st.error(âDas ist noch falsch.â)