My app should contain:
Drop files here
or click to upload
import streamlit as st
from st_aggrid import AgGrid, GridOptionsBuilder, JsCode
import pandas as pd
import requests
st.set_page_config(layout='wide')
# Load sample data
url = "https://corsproxy.io/?https://www.ag-grid.com/example-assets/olympic-winners.json"
# NOTE: Using corsproxy.io because we're in a WASM environment. If running locally,
# you can remove the corsproxy.io prefix.
@st.cache_data
def get_data():
return pd.read_json(url)
df = get_data()
# Custom cell styling using JsCode
cellStyle = JsCode(
"""
function(params) {
if (params.value > 3) {
return {
'backgroundColor': 'gold',
'color': 'black'
}
}
return null;
}
"""
)
# Configure grid options
grid_builder = GridOptionsBuilder.from_dataframe(df)
grid_builder.configure_default_column(
groupable=True,
value=True,
enableRowGroup=True,
editable=True,
filterable=True
)
# Configure specific columns
grid_builder.configure_column("gold", cellStyle=cellStyle)
grid_builder.configure_column("silver", cellStyle=cellStyle)
grid_builder.configure_column("bronze", cellStyle=cellStyle)
# Enable selection
grid_builder.configure_selection(selection_mode="multiple", use_checkbox=True)
# Build final grid options
grid_options = grid_builder.build()
st.title("Olympic Winners Data Grid")
st.markdown("""
This interactive grid shows Olympic winners data with the following features:
- Selectable rows with checkboxes
- Sortable columns
- Filtering capabilities
- Gold highlighting for medal counts > 3
- Grouping functionality
""")
# Create tabs for different views
grid_tab, data_tab = st.tabs(["Grid View", "Raw Data"])
with grid_tab:
grid_response = AgGrid(
df,
grid_options,
height=500,
allow_unsafe_jscode=True,
enable_enterprise_modules=True,
update_mode="MODEL_CHANGED"
)
if grid_response["selected_rows"]:
st.write("Selected rows:")
st.json(grid_response["selected_rows"])
with data_tab:
st.dataframe(df)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?