只读“闪亮”指示器吗?

时间:2018-09-16 01:52:18

标签: r shiny

我有一个现有的Shiny脚本,其中包含Shiny库中的标准小部件。现在,我想添加一些东西以图形方式显示温度吗?这将是一个只读值,因此除非可以锁定并只能以编程方式更改滑块,否则使用滑块是没有意义的。那可能吗?如果没有,还有什么建议?


要澄清:

是否可以将Shiny滑块设为只读。用户无法滑动它,但可以通过编程方式对其进行更改。这是一个闪亮的滑块:

library(shiny)

ui <- fluidPage(

  sliderInput("aa", "Temp",
              min = -20, max = 20,
              value = 10, step = 10)
)

server <- function(input, output) { }

shinyApp(ui, server)

我不熟悉Shiny Dashboard,但我看到了taskItem。是否可以将它们“插入”并与使用FluidPage,sidebarPanel,mainPanel的普通Shiny应用程序一起使用?如何删除项目符号和百分比?这是taskItem的示例。

library(shiny)
library(shinydashboard)

ui <- dashboardPage(

  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    taskItem(value = temp <- 89, color = "red",
                                      "Temp"
                             ))
)

server <- function(input, output) { }

  temp <- 89

shinyApp(ui, server)

enter image description here

2 个答案:

答案 0 :(得分:0)

AFAIK,sliderInput不能用作输出。但是,这是使用progressBar包中的shinyWidgets的潜在解决方案

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      h3("Sidebar")
    ),
    mainPanel(
      br(), br(), br(),
      progressBar("tempbar", value = 0, title = "Temperature", status = "danger")
    )
  )
)

server <- function(input, output, session) {
  temp <- 89
  updateProgressBar(session, id = "tempbar", value = temp)
}
shinyApp(ui, server)

shiny app with temperature bar

用您可能拥有的所有计算值替换temp中的server。对于固定温度值,只需在ui中进行设置即可,无需使用updateProgressBar。默认情况下,progressBar的范围是0-100。要进行修改,请参见文档。

答案 1 :(得分:0)

您可以使用updateSliderInput来达到这种目的。将其与shinyjs::disabled结合使用,您将得到想要的东西。但是,我会寻找一种不那么老套的解决方案:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  ## add style to remove the opacity effect of disabled elements
  tags$head(
    tags$style(HTML("
                    .irs-disabled {
                       opacity: 1      
                    }")
              )
  ),
  useShinyjs(),
  disabled(sliderInput("aa", "Temp",
                       min = -20, max = 20,
                       value = 10, step = 10)),
  actionButton("Change", "Change")
)

server <- function(input, output, session) {
  observeEvent(input$Change, {
    new_temp <- sample(seq(-20, 20, 10), 1)
    updateSliderInput(session, "aa", value = new_temp)
  })
}

shinyApp(ui, server)