Loading of data_editor between every cells

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

Use a form.

1 Like

Yes, thank you. I hadn’t thought of using a st.form here, but someone gave me the idea on another post I’d written, It works great.

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.