How to work date input with shortcuts

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 :upside_down_face:). 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

1 Like