如何在选项卡面板中用水平滚动的非换行行替换 fluidRow?

How to replace fluidRow with a horizontally scrollable non-wrapping row in tab panel?

下面的可重现代码使用 fluidRow() 来容纳多个使用单选按钮的用户选择。在这个只有 2 个单选按钮分组的有限示例中工作正常。但是我需要在这一行中放入更多的单选按钮分组,不要进行任何换行。为此,我想将 fluidRow()/column() 的组合替换为可水平滚动的非换行行,该行不受当前使用的 12 宽网格系统的限制此代码。

此外,在滚动行中查看的所有对象都需要左对齐,不能“流畅”展开。目前,使用此 fluidRow()/column() 组合,如果展开查看窗格,包含每个单选按钮分组的 2 列也会展开,这看起来不太好。它们需要保持固定宽度并保持在左侧。

这可能吗?

我更喜欢坚持这种 sidebar/main panel/tab panel/conditional 面板布局,因为我发现它对于我们处理的数据类型的导航非常友好。

底部的图片进一步说明。

可重现代码:

library(dplyr)
library(DT)
library(shiny)
library(shinyWidgets)

ui <- 
  fluidPage(
    titlePanel("Summary"),
    sidebarLayout(
      sidebarPanel(
        selectInput("selectData", h5("Select data to view:"),
                    choices = list("Beta"),
                    selected = "Beta"),
      ),
      mainPanel(
        tabsetPanel(
          tabPanel("Private data", value = 1,
             conditionalPanel(condition = "input.selectData == 'Beta'",
                fluidRow(div(style = "margin-top:15px"),               
                         column(width = 6, offset = 0,
                            wellPanel(    
                               radioButtons(inputId = 'group1',
                                            label = NULL,
                                            choiceNames = c('By period','By MOA'), 
                                            choiceValues = c('Period','MOA'),
                                            selected = 'Period',
                                            inline = TRUE
                              ),
                              style = "padding-top: 12px; padding-bottom: 0px;"
                            )
                         ),
                         column(width = 6, offset = 0,
                            wellPanel(    
                               radioButtons(inputId = 'group2',
                                            label = NULL,
                                            choiceNames = c('Exclude CT','Include CT'), 
                                            choiceValues = c('Exclude','Include'),
                                            selected = 'Exclude',
                                            inline = TRUE
                              ),
                              style = "padding-top: 12px; padding-bottom: 0px;"
                            )
                         )
                ),
                DTOutput("plants")
          )
        ), 
        id = "tabselected"  
       ) 
     ) 
   ) 
 ) 

server <- function(input, output, session) {
  output$plants <- renderDT({iris %>% datatable(rownames = FALSE)})
}

shinyApp(ui, server)

如何使用轮播而不是例如通过 shinyglide or slickR:

library(dplyr)
library(DT)
library(shiny)
library(shinyWidgets)
library(shinyglide)

ui <- 
  fluidPage(
    titlePanel("Summary"),
    sidebarLayout(
      sidebarPanel(
        selectInput("selectData", h5("Select data to view:"),
                    choices = list("Beta"),
                    selected = "Beta"),
      ),
      mainPanel(
        tabsetPanel(
          tabPanel("Private data", value = 1,
                   conditionalPanel(condition = "input.selectData == 'Beta'",
                                    fluidRow(div(style = "margin-top:15px"),
                                             column(12, glide(
                                               height = "25",
                                               controls_position = "top",
                                               screen(
                                                 p(strong("Group 1")),
                                                 wellPanel(    
                                                   radioButtons(inputId = 'group1',
                                                                label = NULL,
                                                                choiceNames = c('By period','By MOA'), 
                                                                choiceValues = c('Period','MOA'),
                                                                selected = 'Period',
                                                                inline = TRUE
                                                   ),
                                                   style = "padding-top: 12px; padding-bottom: 0px;"
                                                 )
                                               ),
                                               screen(
                                                 p(strong("Group 2")),
                                                 wellPanel(    
                                                   radioButtons(inputId = 'group2',
                                                                label = NULL,
                                                                choiceNames = c('Exclude CT','Include CT'), 
                                                                choiceValues = c('Exclude','Include'),
                                                                selected = 'Exclude',
                                                                inline = TRUE
                                                   ),
                                                   style = "padding-top: 12px; padding-bottom: 0px;"
                                                 )
                                               )
                                             ))
                                    ),
                                    DTOutput("plants")
                   )
          ), 
          id = "tabselected"  
        ) 
      ) 
    ) 
  ) 

server <- function(input, output, session) {
  output$plants <- renderDT({iris %>% datatable(rownames = FALSE)})
}

shinyApp(ui, server)