Hi,
A common pattern for achieving this is with session state and widget callbacks. Here’s an example (using numeric input not dates, just because datetime is a pain
). The start / end values are constrained, which is only possible via callbacks.
import streamlit as st
state = st.session_state
def _set_start_cb():
if state.start > state.end:
state.start = state.end
def _set_end_cb():
if state.end < state.start:
state.end = state.start
start = st.number_input('Start', value=0, on_change=_set_start_cb, key='start')
end = st.number_input('End', value=10, on_change=_set_end_cb, key='end')
def _make_same_cb():
state.end = state.start
def _make_plus7_cb():
state.end = state.start+7
def _make_times2_cb():
state.end = state.start*2
st.button('Same', on_click=_make_same_cb)
st.button('Plus 7', on_click=_make_plus7_cb)
st.button('Times 2', on_click=_make_times2_cb)
st.write(f'Start = {start} | End = {end}')
Happy coding!
Arvindra