How to change the position of st.form_submit_button?

The point about a form is that its widget values are not available to the rest of the app until the form is submitted. That’s why only the submit callback is allowed. Within that callback you can retrieve the form’s widgets’ values using each widget’s key, which you must define.

I provided a solution in another post that has some similarity in terms of the callback mechanisms you could implement to solve your problem. Read that here: Streamlit login solution need to click on "Login" button twice to login - #2 by asehmi. Put the callback on the submit button.

If that still doesn’t solve your problem, and you must have callbacks on the widget change events, then you can simulate a “form” using a container to hold the widgets (so you get a nice border) and a standard button for the submit. That’s the structure used in the above link.