Feature Request: Soporte para Tooltips y HTML en DataGrid/DataTable de Shiny for Python
Resumen Ejecutivo
Después de 6 meses, Shiny for Python continúa sin funcionalidades básicas que R Shiny con DT ha tenido por años. Esta limitación está afectando la adopción de Shiny for Python y obligando a usuarios a volver a R Shiny.
Funcionalidades Faltantes
1. Tooltips en Encabezados de Columnas
Problema: No existe forma de agregar descripciones explicativas en los headers de columnas que aparezcan al hacer hover.
Caso de uso: Mostrar definiciones, unidades de medida, o aclaraciones sobre cada columna sin ocupar espacio visual.
Estado actual:
No disponible
2. HTML Personalizado en Celdas
Problema: No se puede renderizar HTML/CSS dentro de las celdas.
Impacto: Imposible crear:
- ✗ Badges con colores de fondo condicionales
- ✗ Rectángulos redondeados con transparencia
- ✗ Iconos personalizados con estilos
- ✗ Cualquier formato visual avanzado
Estado actual:
No disponible
Comparación con R Shiny
En R con DT (funciona perfectamente):
library(DT)
datatable(df,
escape = FALSE, # ✓ Permite HTML en celdas
options = list(
columnDefs = list(
list(
targets = 0,
render = JS("function(data, type, row) {
return '<span class=\"badge\">' + data + '</span>';
}")
)
)
),
container = withTags(table(
thead(
tr(
th(title = 'Descripción del producto', 'Producto'),
th(title = 'Unidades vendidas', 'Ventas')
)
)
))
)
En Python con Shiny (NO funciona):
No existe esta funcionalidad
render.DataGrid(
df,
escape=False, # Esta opción NO existe
column_tooltips={...} # Esta opción NO existe
)
Workarounds Actuales (Todos Insatisfactorios)
Opción 1: Caracteres Unicode/Emojis
df["Producto"] = "🟢 " + df["Producto"] # No profesional
Problemas:
- No es profesional
- Limitado visualmente
- No permite control de colores/estilos
Opción 2: Renderizar HTML Manual
@render.ui
def tabla():
return ui.HTML(df.to_html(escape=False))
Problemas:
- ✗ Pierde filtros interactivos
- ✗ Pierde ordenamiento
- ✗ Pierde selección de filas
- ✗ Pierde paginación
Opción 3: Great Tables
from great_tables import GT
gt = GT(df).data_color(...)
Problemas:
- ✗ Tabla estática (no interactiva)
- ✗ No permite filtros
- ✗ No permite selección
- ✗ Solo para reportes, no para exploración de datos
Funcionalidad Solicitada
API Propuesta:
render.DataGrid(
df,
# 1. Permitir HTML en celdas
escape=False,
# 2. Tooltips en columnas
column_tooltips={
"Producto": "Nombre del producto vendido",
"Ventas": "Unidades vendidas en el período",
"Cumplimiento": "Porcentaje de cumplimiento del objetivo"
},
# 3. Función de formato/estilo por celda
cell_renderer=lambda row, col, val: {
"html": f'<span class="badge">{val}</span>',
"style": {
"background-color": get_color(val),
"border-radius": "8px",
"padding": "4px 8px"
}
},
# 4. O alternativamente, clases CSS condicionales
cell_classes=lambda row, col, val: {
"badge-success" if val >= 100 else "badge-warning"
}
)
Impacto en la Comunidad
Reportes de usuarios:
- "Tuve el mismo problema hace 6 meses. Pasa el tiempo y 0 evolución"
- Usuarios abandonando Shiny for Python por falta de estas funcionalidades básicas
- Migración de vuelta a R Shiny para proyectos que requieren tablas avanzadas
Consecuencias:
- Menor adopción de Shiny for Python
- Frustración en usuarios existentes
- Pérdida de credibilidad vs R Shiny
- Limitación en casos de uso reales
Prioridad
ALTA - CRÍTICO
Justificación:
- Es funcionalidad básica esperada en cualquier librería moderna de tablas
- R Shiny lo tiene desde hace años
Bloquea casos de uso comunes en dashboards empresariales - Afecta negativamente la adopción de Shiny for Python
Implementación Sugerida
Fase 1: HTML en Celdas
Agregar parámetro escape=False similar a pd.DataFrame.to_html()
Fase 2: Tooltips en Columnas
Agregar parámetro column_tooltips con diccionario de descripciones
Fase 3: Funciones de Formato
Permitir funciones callback para renderizar celdas con HTML/CSS personalizado
Referencias
- DT para R Shiny: DT: An R interface to the DataTables library
- Pandas Styler (inspiración): Table Visualization — pandas 3.0.2 documentation
- Issue relacionado:
Solicitud
Por favor consideren esta funcionalidad para Shiny for Python 1.0+. Es una de las principales barreras para la adopción empresarial de la librería.
Reportado por: Comunidad de usuarios de Shiny for Python
Fecha: 2026
Versión de Shiny: 1.x.x