Read text_input fields after button click in one session_state

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 :arrow_down:’, ‘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 :arrow_down:’:
st.warning(“Noch keine Antwort gegeben”)
elif onequest_1 != “Das ist eine mögliche Antwort2”:
st.error(“Das ist noch falsch.”)