I used session_state to replace the whole button. Here is how I switch between 2 buttons:
myKey = 'my_key'
if myKey not in st.session_state:
st.session_state[myKey] = False
if st.session_state[myKey]:
myBtn = st.sidebar.button('Button 1')
st.session_state[myKey] = False
else:
myBtn = st.sidebar.button('Button 2')
st.session_state[myKey] = True
You can use integer instead of boolean to have more cases.