es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar el color del actionButton cuando se hace clic en el botón en Shiny R.

Tengo un actionButton definido en la interfaz de usuario como uiOutput(“DartSearchAdv”). Me gustaría que el botón cambie de color cuando se modifica input$target_min_ab. Y cuando se presiona input$DartSearchAdv, quiero que el color vuelva a la configuración predeterminada.

He intentado implementar la sugerencia aquí, y el cambio de color funcionará como se desea, pero ciertas salidas generadas desde la pulsación del botón están ocultas (“mainPanelDST”). Puedo intentar hacer que aparezcan si hago show(“mainPanelDST”), pero entonces el cambio de color no se produce, o el botón desaparecerá hasta que se interactúe con input$target_min_ab nuevamente.

A continuación se muestra el código relevante del servidor.

“`{r}
global <- reactiveValues(clicked = FALSE)

<h1>Estilo deseado cuando se hace clic en el botón</h1>

defaultColor = 'padding:10px; font-size:120%;
color: white; background-color: #3E668E;
border-color: #2C3E50';

<h1>Estilo deseado cuando se cambia una configuración</h1>

updateColor = 'padding:10px; font-size:120%;
color: white; background-color: #428BCA;
border-color: #95A5A6';

<h1>Renderizar el botón</h1>

output$DartSearchAdv <- renderUI({
if (global$clicked){
actionButton("DartSearchAdv", "Actualizar Búsqueda",
style = defaultColor)
} else {
actionButton("DartSearchAdv", "Actualizar Búsqueda",
style = updateColor)
}

<pre><code>})
</code></pre>

<pre><code><br />Y aquí están las entradas que deberían cambiar de color

“`{r}
# Entrada que cambia el color a updateColor
observeEvent(input$target_min_ab,{
rv$target_min_ab = input$target_min_ab/100;
global$clicked = FALSE;
})

# Entrada que cambia el color a predeterminado
trigger_button2 <- eventReactive(input$DartSearchAdv, {
# Hacer cosas aquí
global$clicked = TRUE

}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el comportamiento deseado, puedes utilizar la función observeEvent() para detectar cambios en input$target_min_ab y actualizar el parámetro style del actionButton() en consecuencia.

    Además, puedes utilizar otro observeEvent() para detectar cuando se presiona input$DartSearchAdv y establecer la variable global$clicked en FALSE, lo que hará que el color cambie nuevamente al updateColor.

    Aquí está el código actualizado para el servidor:

    global <- reactiveValues(clicked = FALSE)
    
    # Estilo deseado cuando el botón es presionado
    defaultColor = 'padding:10px; font-size:120%;
             color: white; background-color: #3E668E;
             border-color: #2C3E50'
    
    # Estilo deseado cuando una configuración es modificada
    updateColor = 'padding:10px; font-size:120%;
           color: white; background-color: #428BCA;
           border-color: #95A5A6'
    
    # renderizar el botón
    output$DartSearchAdv <- renderUI({
      actionButton("DartSearchAdv", "Actualizar Búsqueda",
                   style = if (global$clicked) defaultColor else updateColor)
    })
    
    # input que cambia el color a updateColor
    observeEvent(input$target_min_ab, {
      updateActionButtonColor()
    })
    
    # input que cambia el color a default
    trigger_button2 <- eventReactive(input$DartSearchAdv, {
      # Hacer cosas aquí dentro
      global$clicked = TRUE
      # restablecer el color del botón
      updateActionButtonColor()
    })
    
    # función para actualizar el color del botón
    updateActionButtonColor <- function() {
      if (global$clicked) {
        # si el botón ya ha sido presionado, mantener el color por defecto
        updateActionButton("DartSearchAdv", style = defaultColor)
      } else {
        # si el botón no ha sido presionado, utilizar el color de actualización
        updateActionButton("DartSearchAdv", style = updateColor)
      }
    }
    
    

    Este código define una función separada updateActionButtonColor() que verifica el valor de global$clicked y actualiza el parámetro style del botón en consecuencia. Esta función es llamada tanto cuando input$target_min_ab cambia como cuando se presiona input$DartSearchAdv.

    Nótese que utilizamos updateActionButton() en lugar de actionButton() para modificar el estado del botón dinámicamente, lo cual asegura que el botón permanezca visible incluso cuando sus parámetros de estilo cambien.

Comments are closed.