I’m trying to make an app. It’ currently in local.
In the app, I have a data_editor for register data. It works fine, but I have a problem.
When I edit a cell, the data_editor reload and it takes half a second to take the new value. So, between two cells, I have to wait a bit and that slows down the data capture.
How can I ensure that the data_editor doesn’t reload between each cell?
This is the code I use:
col1, col2 = st.columns(2)
# affichage des filtres
numero_semaine = col1.number_input("Numéro de semaine",min_value=0, max_value=50, value=week_number, step=1, key="numero_semaine_ajout")
site = col2.selectbox("Site de travail", key="site_ajout", options=df_personnes["site"].sort_values().unique())
# crée la table avec les nouvelles données vides selon la semaine
nouvelles_donnees_vide = creation_table_nouvelles_donnees(df_production)
# si la semaine est déja remlie, affiche un message de warning
if (df_production[df_production["site"]==site]["semaine"] == int(numero_semaine)).any():
st.error("Les données de cette semaine sont déja rentrées.")
else:
# sinon, affiche la table à éditer
donnee_a_ajouter = affiche_table_nouvelles_donnees(nouvelles_donnees_vide, df_personnes, site)
if st.button("Ajouter ces données",key="ajouter_donnees"):
# si clique sur le bouton, ajoute les nouvelles données aux ancienne et enegistre dans le fichier csv
df_total = reconstruit_table_avec_nouvelles_donnnees(donnee_a_ajouter, df_production, df_personnes, numero_semaine, site)
df_total.to_csv(CHEMIN_FICHIER_PRODUCTION, index=False)
st.success("Les données ont bien été ajoutées.")
with this function:
def affiche_table_nouvelles_donnees_vie_actif(df, df_personnes, site):
"""pour les données de vie de l'atif, affiche le dataframe donnée en ajoutant les noms des personnes, et en filtrant les colonnes, sous forme d'un data_editor puis récupère les données
Args:
df (dataframe): dataframe vide à éditer
df_personnes (dataframe): dataframe dans lequel récupérer les noms des personnes
site (str): nom du site dont l'on doit prendre les personnes
Returns:
dataframe: dataframe édité avec les modifications et les noms des personnes
"""
# ajoute les noms au dataframe
df["nom_prenom"] = df_personnes[df_personnes["site"] == site]["nom_prenom"]
# ajoute les trigrammes au dataframe
df["trigramme"] = df_personnes[df_personnes["site"] == site]["trigramme"]
# récupère les colonnes utiles à éditer
df = df[["trigramme","nom_prenom","horaire_reel","cumul_s","dossier_cloture","nombre_dossier_controle","nombre_dossier_ko","remarques"]]
# configure l'affichage des colonnes à éditer
colum_config = {
"horaire_reel": st.column_config.NumberColumn(
"Horaire réel", min_value=0, max_value=50, step=0.1
),
"cumul_s": st.column_config.NumberColumn(
"Nombre de dossiers total", min_value=0, max_value=500, step=1
),
"dossier_cloture" : st.column_config.NumberColumn(
"Nombre de dossier cloturé", min_value=0, max_value=500, step=1
),
"nombre_dossier_controle": st.column_config.NumberColumn(
"Nombre de dossier controlé", min_value=0, max_value=50, step=1
),
"nombre_dossier_ko": st.column_config.NumberColumn(
"Nombre de dossier avec ko", min_value=0, max_value=50, step=1
)
}
# affiche la table d'édition
donnee_a_ajouter = st.data_editor(df,column_config=colum_config, use_container_width=True, height=int((len(df.reset_index(drop=True))+1) * 35.5), hide_index=True)
return donnee_a_ajouter