Created
December 8, 2022 21:20
-
-
Save alexlib/276a9c10dc55d7a75676e52b4ac230df to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import streamlit as st | |
# streamlit preparation | |
st.title('Four dependent sliders') | |
# Session state callbacks | |
def callback_x1(): | |
"""The callback renormalizes the values that were not updated.""" | |
# Here, if we modify X1, we calculate the remaining value for normalisation of X2, X3 and X4 | |
remain = 100 - st.session_state.x1 | |
# This is the proportions of X2, X3 and X4 in remain | |
sum = st.session_state.x2 + st.session_state.x3 + st.session_state.x4 | |
# This is the normalisation step | |
st.session_state.x2 = st.session_state.x2/sum*remain | |
st.session_state.x3 = st.session_state.x3/sum*remain | |
st.session_state.x4 = st.session_state.x4/sum*remain | |
def callback_x2(): | |
remain = 100 - st.session_state.x2 | |
sum = st.session_state.x1 + st.session_state.x3 + st.session_state.x4 | |
st.session_state.x1 = st.session_state.x1/sum*remain | |
st.session_state.x3 = st.session_state.x3/sum*remain | |
st.session_state.x4 = st.session_state.x4/sum*remain | |
def callback_x3(): | |
remain = 100 - st.session_state.x3 | |
sum = st.session_state.x1 + st.session_state.x2 + st.session_state.x4 | |
st.session_state.x1 = st.session_state.x1/sum*remain | |
st.session_state.x2 = st.session_state.x2/sum*remain | |
st.session_state.x4 = st.session_state.x4/sum*remain | |
def callback_x4(): | |
remain = 100 - st.session_state.x4 | |
sum = st.session_state.x1 + st.session_state.x2 + st.session_state.x3 | |
st.session_state.x1 = st.session_state.x1/sum*remain | |
st.session_state.x2 = st.session_state.x2/sum*remain | |
st.session_state.x3 = st.session_state.x3/sum*remain | |
# Sessions tate initialise | |
# Check if 'key' already exists in session_state | |
# If not, then initialize it | |
if 'x1' not in st.session_state: | |
st.session_state['x1'] = 50.0 | |
if 'x2' not in st.session_state: | |
st.session_state['x2'] = 25.0 | |
if 'x3' not in st.session_state: | |
st.session_state['x3'] = 12.5 | |
if 'x4' not in st.session_state: | |
st.session_state['x4'] = 12.5 | |
# The four sliders | |
st.slider("x1 value, %", | |
min_value = 0.0, | |
max_value = 100.0, | |
key='x1', on_change=callback_x1) | |
st.slider("x2 value, %", | |
min_value = 0.0, | |
max_value = 100.0, | |
key='x2', on_change=callback_x2) | |
st.slider("x3 value, %", | |
min_value = 0.0, | |
max_value = 100.0, | |
key='x3', on_change=callback_x3) | |
st.slider("x4 value, %", | |
min_value = 0.0, | |
max_value = 100.0, | |
key='x4', on_change=callback_x4) | |
# Print things to check | |
st.write(st.session_state.x1 + st.session_state.x2 + st.session_state.x3 + st.session_state.x4) | |
st.write(st.session_state.x1) | |
st.write(st.session_state.x2) | |
st.write(st.session_state.x3) | |
st.write(st.session_state.x4) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment