Streamlit +streamlit-aggrid: щелчки по флажку регистрируются визуально, но выбор/значение не обновляются после развертывPython

Программы на Python
Ответить
Anonymous
 Streamlit +streamlit-aggrid: щелчки по флажку регистрируются визуально, но выбор/значение не обновляются после развертыв

Сообщение Anonymous »

Я использую Streamlit +streamlit-aggrid (AG Grid Community) и столкнулся со странной проблемой, связанной с клиентом:
  • ✅ Работает локально на моем компьютере
  • ✅ Работает после развертывания для моих коллег
  • ❌ После развертывания только на моем компьютере/браузере, сетка отображается, но щелчки по флажку не регистрируются
Что я вижу (симптомы)
На моем компьютере (только развернутое приложение):
  • При нажатии на флажок выбора строки ничего не происходит (выбор не изменяется)
  • Нажмите флажок с редактируемым логическим значением () ничего не делает (значения не изменяются)
  • Сетка отображается и прокручивается нормально — только установка флажка приводит к сбою
  • Поскольку выбор никогда не обновляется, моя Панель назначений никогда не открывается
Ожидаемое поведение
  • Если пользователь выбирает любую строку с помощью флажка в столбце Выбрать, приложение должно открыть Панель назначений (изначально скрытую).
  • Панель назначений отображается только в том случае, если selected_ids не пусто.
пример
Этот упрощенный пример воспроизводит поведение: при выборе строк следует обновить выбранные_строки и отобразить раздел «Назначение».

Код: Выделить всё

import streamlit as st
import pandas as pd
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode, JsCode, DataReturnMode

st.set_page_config(layout="wide")
st.title("AG Grid checkbox not clickable after deployment (client-specific)")

# ---- sample data ----
df = pd.DataFrame({
"unique_id": [1, 2, 3],
"name": ["A", "B", "C"],
"locked": [False, True, False],
})

# Add selection helper column (must be non-boolean to avoid double-checkbox effect)
df_view = df.copy()
df_view.insert(0, "Select", "")  # Selection checkbox column

gb = GridOptionsBuilder.from_dataframe(df_view)

gb.configure_default_column(
editable=False,
resizable=True,
sortable=True,
filter=False,
suppressMenu=True,
)

# Selection config
gb.configure_selection(
selection_mode="multiple",
use_checkbox=False,
suppressRowClickSelection=True,
)

# Row selection checkbox column
gb.configure_column(
"Select",
checkboxSelection=True,
headerCheckboxSelection=True,
headerCheckboxSelectionFilteredOnly=True,
pinned="left",
width=90,
sortable=False,
filter=False,
)

# Editable boolean checkbox column
gb.configure_column(
"locked",
header_name="Locked",
editable=True,
cellRenderer="agCheckboxCellRenderer",
cellEditor="agCheckboxCellEditor",
type=["booleanColumn"],
width=90,
)

grid_options = gb.build()

# Stable row IDs + immutability (used in my real app)
grid_options["immutableData"] = True
grid_options["getRowId"] = JsCode("function(p){ return String(p.data.unique_id); }")

resp = AgGrid(
df_view,
gridOptions=grid_options,
update_mode=GridUpdateMode.VALUE_CHANGED | GridUpdateMode.SELECTION_CHANGED,
data_return_mode=DataReturnMode.AS_INPUT,
allow_unsafe_jscode=True,
theme="streamlit",
height=300,
key="grid",
)

# ---- selection ->  open assignment panel ----
selected = resp.get("selected_rows", [])
st.write("Selected rows:", selected)

selected_ids = []
if isinstance(selected, list):
selected_ids = [r.get("unique_id") for r in selected if r.get("unique_id") is not None]

st.subheader("Assignment panel")
if selected_ids:
st.success(f"Assignment panel is OPEN (selected ids: {selected_ids})")
st.write("...assignment UI here...")
else:
st.info("Assignment panel is hidden until at least one row is selected.")
Мой реальный звонок из приложения (похожий)

Код: Выделить всё

grid_resp = AgGrid(
t,
gridOptions=grid_options,
update_mode=GridUpdateMode.VALUE_CHANGED | GridUpdateMode.SELECTION_CHANGED,
data_return_mode=DataReturnMode.AS_INPUT,
allow_unsafe_jscode=True,
fit_columns_on_grid_load=True,
theme="streamlit",
height=520,
key=f"supplier_grid_{st.session_state.get('bulk_widget_reset_counter', 0)}",
)
Среда
  • Python: 3.12
  • streamlit: 1.41.1
  • streamlit-aggrid: 1.1.0
  • Развертывание: Служба приложений Azure (Linux) (также протестировано аналогичным образом в Streamlit Cloud)
То, что я уже пробовал
  • Принудительное обновление + очистка кэша
  • Другой браузер + инкогнито
  • Отключенные расширения / adblock
  • Изменен ключ сетки= для принудительного повторного монтирования
  • Отключены immutableData
  • Пропробованы различные комбинации GridUpdateMode
  • Удален пользовательский CSS (включая скрытие AG Grid) меню)
  • Проверенные типы данных (столбец выбора — строка, заблокирован — логическое значение)
Ключевые детали
Это происходит только для меня в развернутом приложении.

То же самое развертывание работает и для коллег.
/>Что может привести к тому, что события щелчков по флажку AG Grid будут заблокированы только для определенного клиента после развертывания?
Любые известные проблемы с:
  • Streamlit iframe/обработкой событий,
  • настройками безопасности браузера,
  • наложением CSS / z-index / pointer-events,
  • корпоративные прокси/внедренные скрипты,
  • илиstreamlit-aggrid + поведение средства рендеринга/редактора ячеек флажка AG Grid?
Если известны шаги отладки (например, проверка наложений DOM, события указателя, прослушиватели событий, проблемы CSP), буду признателен за рекомендации.

Подробнее здесь: https://stackoverflow.com/questions/798 ... lection-va
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»