File size: 3,420 Bytes
64f9ede ce8e938 64f9ede 4223220 64f9ede ce8e938 64f9ede ce8e938 4223220 ce8e938 64f9ede ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 ce8e938 4223220 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
import streamlit as st
from util import getYamlConfig
def update_session_state(key,):
# Get new value from session state and change key for save it in params
new_value = st.session_state[key]
key = key[5:]
for item in st.session_state.data_dict:
if item['key'] == key:
item['value'] = new_value
break
def page():
st.subheader("Définissez vos paramètres")
# Charge la configuration YAML
config = getYamlConfig()
# Vérifie si la structure inclut des 'parts' ou une liste de variables
if 'parts' in config['variables']:
# Cas avec 'parts' : Trie les parts et affiche les champs par onglet
parts = config["variables"]["parts"]
parts_sorted = sorted(parts, key=lambda part: part.get('number', float('inf')))
# Création de tabs pour chaque 'part' trié
tabs = st.tabs([part['name'] for part in parts_sorted])
for part, tab in zip(parts_sorted, tabs):
with tab:
for field in part['fields']:
for field_session in st.session_state.data_dict:
if field['key'] == field_session['key']:
display_field(field_session)
else:
# Display fields directly if no parts are defined
for field in st.session_state.data_dict:
display_field(field)
def display_field(field):
"""Helper function to create the correct input based on field 'nature'."""
key = 'form_' + field['key']
if field['nature'] == 'radio':
st.radio(
field['label'],
field['options'],
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0,
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'selectbox':
st.selectbox(
field['label'],
field['options'],
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0,
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'multiselect':
st.multiselect(
field['label'],
field['options'],
default=[field['options'].index(value) for value in field.get('value') if value in field['options']],
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'date':
st.date_input(
field['label'],
value=field.get('value', None),
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'numeric':
st.number_input(field['label'],
value=field.get('value', 0),
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'text_area':
st.text_area(field['label'],
value=field.get('value', ""),
key=key,
on_change=update_session_state,
args=(key,)
)
else:
st.text_input(label=field['label'],
value=field.get('value', ""),
key=key,
on_change=update_session_state,
args=(key,)
)
page() |