【问题标题】:How to make switches exclusive in Shiny?如何让开关在 Shiny 中独占?
【发布时间】:2021-07-16 11:57:32
【问题描述】:

在 Shiny 中,我想要两个(漂亮的)开关,我可以离开:

  • 已取消选择,
  • 或一次只选择一个。

然后,所需的行为是第一个开关为TRUE 自动将第二个开关的值设置为FALSE。反之亦然。

我尝试使用以下脚本,但它没有按预期工作。实际上,在正确更改值之前,我需要在开关上单击两次

library(shiny)
library(shinyWidgets)

# Define UI
ui <- fluidPage(
    
    # Application title
    titlePanel("Update the switch"),
    
    # Pretty switches 
    prettySwitch('one', 'one'),
    prettySwitch('two', 'two')
    
)

# Define server logic
server <- function(input, output) {
    
    observeEvent({input$one == TRUE}, {
        updateCheckboxInput(
            inputId = "two",
            value = F
        )
    })
    
    observeEvent({input$two == TRUE}, {
        updateCheckboxInput(
            inputId = "one",
            value = F
        )
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shinywidgets


    【解决方案1】:

    我认为问题在于您如何放置observeEvent,只需使其依赖于按钮,不要在第一个参数中指定条件,您可以在observeEvent 本身内完成其余的工作。此外,一个好的建议是坚持使用 bool:TRUEFALSE 的完整定义,尽量不要将其缩写为一种好习惯

    library(shiny)
    library(shinyWidgets)
    
    # Define UI
    ui <- fluidPage(
        
        # Application title
        titlePanel("Update the switch"),
        
        # Pretty switches 
        prettySwitch('one', 'one'),
        prettySwitch('two', 'two')
        
    )
    
    # Define server logic
    server <- function(input, output,session) {
        
        observeEvent(input$one, {
            if(input$one == TRUE){
                updateCheckboxInput(session,inputId = "two",value = FALSE)
            }
        }, ignoreInit = TRUE)
        
        observeEvent(input$two,{
            if(input$two == TRUE){
                updateCheckboxInput(session,inputId = "one",value = FALSE)
            }
        }, ignoreInit = TRUE)
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 这很好用!我只需要将updateCheckboxInput 更改为updatePrettySwitch
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2023-01-08
    相关资源
    最近更新 更多