Индикатор только для чтения в Shiny? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть существующий скрипт 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.Можно ли их «вставить» и использовать с обычным приложением Shiny, которое использует FluidPage, SideBarPanel, MainPanel?Как убрать точку маркера и процент?Вот пример элемента 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 голосов
/ 29 мая 2019

Вы можете использовать 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)
0 голосов
/ 16 сентября 2018

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)

блестящее приложение с температурной полосой

Замените temp в server на любое рассчитанное вами значение. Для фиксированного значения температуры просто установите его в ui, не нужно использовать updateProgressBar. По умолчанию progressBar масштабируется от 0 до 100. Для изменения см. Документацию к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...