,并在尝试在动态更新的网格中尝试cyperist复选框时面临问题。 问题上下文
我有三个数据帧:df_1
df_2
:选择复选框的子集。
df_1
df_3
中,以确保更新为st.session_state['saved_i']
。
正确保存的复选框状态是在更新到
df_1
。
但是,如果在df_2
df_1
中存储的结果是结果,第二个复选框选择是丢失
,并且在任何地方都没有保存。
df_2
(不出现)。
在更新之前,请努力手动存储索引(无效)。
st.session_state['saved_i']
中的所有复选框选择?我希望grid_response_2.event_data
保留所选复选框的状态。
Python中的代码:grid_response_2.event_data
开机gifst.session_state
df_2
中。 import pandas as pd
import streamlit as st
import numpy as np
from st_aggrid import AgGrid, GridOptionsBuilder, JsCode, GridUpdateMode
#################################################################################
# Creating df:
df = pd.DataFrame({
'i': range(20),
'Values': [f'P{i}' for i in range(20)]
})
df['Selected'] = False
#################################################################################
col1, col2 = st.columns(2)
# Creating grid (df):
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(editable=True, groupable=True, resizeable=True)
grid_options = gb.build()
with col1:
grid_response = AgGrid(df,
gridOptions=grid_options,
fit_columns_on_grid_load=False,
height=250,
)
#################################################################################
# Creating df_2:
df_2 = grid_response.data.loc[grid_response.data['Selected']].copy()
df_2['Selected'] = False
# Pre-selecting the checkboxes from the previous interaction:
if 'saved_i' in st.session_state:
i_df_2 = df_2.index
i_df_3 = st.session_state['saved_i']
select = i_df_3[np.isin(i_df_3, i_df_2)]
df_2.loc[select, 'Selected'] = True
#################################################################################
# Creating grid (df_2)
if not df_2.empty:
gb_2 = GridOptionsBuilder.from_dataframe(df_2)
gb_2.configure_default_column(editable=True, groupable=True, resizeable=True)
gb_2.configure_column('Selected', sort='desc')
grid_options_2 = gb_2.build()
with col2:
grid_response_2 = AgGrid(df_2,
gridOptions=grid_options_2,
fit_columns_on_grid_load=False,
height=250)
#################################################################################
# Creating df_3 with selected checkboxes from df_2:
df_3 = grid_response_2.data.loc[grid_response_2.data['Selected']].copy()
#################################################################################
# Saving indexes in session for the next update:
if not df_3.empty:
st.session_state['saved_i'] = df_3["i"].astype(str)
df_2
取决于会话状态选择,而不是对
st.session_state['saved_i']
df_2