Shiny 中的只读指示器?

Posted

技术标签:

【中文标题】Shiny 中的只读指示器?【英文标题】:Read only indicator in Shiny? 【发布时间】:2019-02-20 08:24:00 【问题描述】:

我有一个现有的 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应用程序一起使用吗?如何删除项目符号和百分比?这是一个任务项的示例。

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)

【问题讨论】:

添加为图片? 除非您提供更多信息,否则我不知道还能提供哪些帮助。在 SO 上,我们更喜欢完全可重现的示例,这样我们可以更好地了解您正在尝试做什么并为您提供与您的情况相关的内容。参考:***.com/questions/5963269、***.com/help/mcve 和 ***.com/tags/r/info。 见说明。 【参考方案1】:

AFAIK,sliderInput 不能用作输出。然而,这是一个使用来自shinyWidgets 包的progressBar 的潜在解决方案

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

server 中的temp 替换为您可能拥有的任何计算值。对于固定温度值,只需将其设置在ui,无需使用updateProgressBar。默认情况下,progressBar 的缩放范围为 0-100。要修改,请参阅它的文档。

【讨论】:

【参考方案2】:

您可以使用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)

【讨论】:

以上是关于Shiny 中的只读指示器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在闪亮的应用程序中显示忙碌指示器?

如何使 QSlider 只读?

用情节 Shiny R 制作累积图形

警报中的指示器,指示器不显示(使用 UIAlertController 解决)

pandas 操作过程中的进度指示器

GWT MAP 中的活动指示器