【问题标题】:Active tab to select radio button in Shiny在 Shiny 中选择单选按钮的活动选项卡
【发布时间】:2020-04-25 19:37:01
【问题描述】:

我有以下 Shiny 应用程序代码,用户可以在其中选择单选按钮,然后激活相应的选项卡面板。

我的问题是如何做相反的事情,即如果用户选择一个标签面板,你如何激活相应的单选按钮。

下面是一个可重现的例子。

例如,如果您选择 Tab 2 单选按钮,则 Tab 2 被激活

如果您随后选择 Tab 3,则 Tab 2 单选按钮保持选中状态,我希望它更新为 Tab 3 单选按钮

谢谢

library(shiny)

radio_button_choices = list("Tab 1" = 1, "Tab 2" = 2, "Tab 3" = 3)

ui <- fluidPage(

sidebarLayout(
    sidebarPanel(
      radioButtons(inputId = "radio_button", label = h5("Select tab"), choices = radio_button_choices)),

    mainPanel(
      tabsetPanel(id = "tab",

                  tabPanel("Tab1", value = "panel1", htmlOutput("text1")),
                  tabPanel("Tab2", value = "panel2", htmlOutput("text2")),
                  tabPanel("Tab3", value = "panel3", htmlOutput("text3"))
      )
    ) 
  )
)

server <- function(input, output, session) {

  observeEvent(input$radio_button, {
    updateTabsetPanel(session, "tab",
                      selected = paste0("panel", input$radio_button)
    )
  })

  output$text1 = renderUI({
    str1 = "This is tab 1"
    HTML(paste(str1)) 
  })

  output$text2 = renderUI({
    str1 = "This is tab 2"
    HTML(paste(str1)) 
  })

  output$text3 = renderUI({
    str1 = "This is tab 3"
    HTML(paste(str1)) 
  })

}

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

【问题讨论】:

    标签: r shiny tabpanel


    【解决方案1】:

    你可以用updateRadioButtons做类似的事情。

    您可能还希望为您的tabPanel 选择一个类似的向量。

    library(shiny)
    
    radio_button_choices = list("Tab 1" = 1, "Tab 2" = 2, "Tab 3" = 3)
    panel_choices = list("Panel 1" = 1, "Panel 2" = 2, "Panel 3" = 3)
    
    ui <- fluidPage(
    
      sidebarLayout(
        sidebarPanel(
          radioButtons(inputId = "radio_button", label = h5("Select tab"), choices = radio_button_choices)),
    
        mainPanel(
          tabsetPanel(id = "tab",
    
                      tabPanel(names(panel_choices)[1], value = panel_choices[[1]], htmlOutput("text1")),
                      tabPanel(names(panel_choices)[2], value = panel_choices[[2]], htmlOutput("text2")),
                      tabPanel(names(panel_choices)[3], value = panel_choices[[3]], htmlOutput("text3"))
          )
        ) 
      )
    )
    
    server <- function(input, output, session) {
    
      observeEvent(input$radio_button, {
        updateTabsetPanel(session, "tab", selected = input$radio_button)
      })
    
      output$text1 = renderUI({
        str1 = "This is tab 1"
        HTML(paste(str1)) 
      })
    
      output$text2 = renderUI({
        str1 = "This is tab 2"
        HTML(paste(str1)) 
      })
    
      output$text3 = renderUI({
        str1 = "This is tab 3"
        HTML(paste(str1)) 
      })
    
      observeEvent(input$tab, {
        updateRadioButtons(session, "radio_button", selected = input$tab)
      })
    
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多