【问题标题】:How to put an icon to the title of an input widget in Shiny and Shiny dashboard如何在闪亮和闪亮的仪表板中将图标放在输入小部件的标题上
【发布时间】:2019-09-26 13:41:36
【问题描述】:

是否可以在 Shiny and Shiny 和 Shiny 仪表板中的输入小部件标题中添加图标?下面是一个例子。我想为每个输入小部件添加一个图标,以指示它是数字输入(使用条形图图标)还是文本输入(使用字体图标)。现在,我正在使用两列。一个带有width = 1 的图标,另一个用于输入小部件。如果我可以直接将图标添加到标题中,那就太好了。请让我知道是否有办法实现这一点。

library(shiny)
library(shinydashboard)

header <- dashboardHeader(
  title = "Icon Example"
)

sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem(
      text = "Input",
      tabName = "Input"
    )
  )
)

body <- dashboardBody(
  tabItem(
    tabName = "Input",
    fluidRow(
      column(
        width = 6,
        box(
          status = "primary", solidHeader = TRUE,
          width = 12,
          title = "Box 1",
          fluidRow(
            column(width = 1,
                   tags$div(HTML('<i class="fa fa-bar-chart" style = "color:#0072B2;"></i>'))
            ),
            column(width = 11,
                   numericInput(inputId = "Num", label = "This is a numeric input", value = 1000))
          ),
          fluidRow(
            column(width = 1,
                   tags$div(HTML('<i class="fa fa-font" style = "color:#D55E00;"></i>'))
            ),
            column(width = 11,
                   textInput(inputId = "Text", label = "This is a text input")
            )
          )
        )
      )
    )
  )
)

# User Interface
ui <- dashboardPage(
  header = header,
  sidebar = sidebar,
  body = body
)

# Server logic
server <- function(input, output, session){}

# Complete app with UI and server components
shinyApp(ui, server)

这是我的代码示例的屏幕截图。我想让输入字段的开头与图标对齐(如红色箭头所示)。换句话说,我希望图标可以成为输入小部件标题的一部分。

【问题讨论】:

    标签: html r shiny font-awesome shinydashboard


    【解决方案1】:

    编辑:

    为了增加代码的可读性,我们可以使用icon 代替HTML

    numericInput(inputId = "Num", label = div(icon("bar-chart", style = "color:blue;"), " This is a numeric input"), value = 1000)
    

    初步答案:

    只需使用您的div 作为标签:

    library(shiny)
    library(shinydashboard)
    
    header <- dashboardHeader(title = "Icon Example")
    
    sidebar <- dashboardSidebar(sidebarMenu(menuItem(text = "Input", tabName = "Input")))
    
    body <- dashboardBody(tabItem(tabName = "Input",
                                  fluidRow(column(
                                    width = 6,
                                    box(
                                      status = "primary",
                                      solidHeader = TRUE,
                                      width = 12,
                                      title = "Box 1",
                                      fluidRow(column(
                                        width = 11,
                                        numericInput(
                                          inputId = "Num",
                                          label = tags$div(HTML('<i class="fa fa-bar-chart" style = "color:#0072B2;"></i> This is a numeric input')),
                                          value = 1000
                                          )
                                      )),
                                      fluidRow(column(
                                        width = 11,
                                        textInput(
                                          inputId = "Text",
                                          label = tags$div(HTML('<i class="fa fa-font" style = "color:#D55E00;"></i> This is a text input'))
                                          )
                                      ))
                                    )
                                  ))))
    
    # User Interface
    ui <- dashboardPage(header = header,
                        sidebar = sidebar,
                        body = body)
    
    # Server logic
    server <- function(input, output, session) {}
    
    # Complete app with UI and server components
    shinyApp(ui, server)
    

    结果:

    【讨论】:

    • 谢谢。这很棒。
    【解决方案2】:

    您可以通过将icon() 包装到span()tagList() 来实现此目的。检查下面的更新代码:

    library(shiny)
    library(shinydashboard)
    
    header <- dashboardHeader(
      title = "Icon Example"
    )
    
    sidebar <- dashboardSidebar(
      sidebarMenu(
        menuItem(
          text = "Input",
          tabName = "Input"
        )
      )
    )
    
    body <- dashboardBody(
      tabItem(
        tabName = "Input",
        fluidRow(
          column(
            width = 6,
            box(
              status = "primary", solidHeader = TRUE,
              width = 12,
              title = span(tagList(icon("bar-chart"), "Box 1")),
              fluidRow(
                column(width = 1,
                       tags$div(HTML('<i class="fa fa-bar-chart" style = "color:#0072B2;"></i>'))
                ),
                column(width = 11,
                       numericInput(inputId = "Num", label = "This is a numeric input", value = 1000))
              )
            ),
    
            box(
              status = "primary", solidHeader = TRUE,
              width = 12,
              title = span(tagList(icon("font"), "Box 2")),
              fluidRow(
                column(width = 1,
                       tags$div(HTML('<i class="fa fa-font" style = "color:#D55E00;"></i>'))
                ),
                column(width = 11,
                       textInput(inputId = "Text", label = "This is a text input")
                )
              )
            )
          )
        )
      )
    )
    
    # User Interface
    ui <- dashboardPage(
      header = header,
      sidebar = sidebar,
      body = body
    )
    
    # Server logic
    server <- function(input, output, session){}
    
    # Complete app with UI and server components
    shinyApp(ui, server)
    

    【讨论】:

    • 感谢您的回答,但这不是我想要的(尽管如此,我给您一个支持,因为展示如何使用 spantagList 很酷)。请查看我更新的屏幕截图和我的问题的描述。我想将图标作为输入小部件标题的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多