Настройки контейнера при выводе текста Shiny - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь сделать визуальный вывод текста с помощью автоматической c полосы прокрутки, которая активируется, когда текст становится слишком широким или длинным. На данный момент я достиг полосы прокрутки на x-axis с container = pre в качестве аргумента в Textoutput в пользовательском интерфейсе.

Я хотел бы, чтобы вывод в текстовом выводе ограничивался 4 или 5 строками, а затем иметь полосу прокрутки для просмотра оставшихся строк.

Я просмотрел все сообщения, которые мог найти для topi c (поэтому я реализовал контейнер = pre), но я не смог найти способ решить полосу прокрутки по оси Y. Я понимаю, что это как-то связано с переполнением y: "auto" в настройках тегов, но я не могу заставить его работать, может быть, я ошибаюсь. Спасибо. Вот пример:

# Shiny example
library(shinydashboard)
library(shiny)
library(stringi)
library(shinyWidgets)

# Data 
  # Some random letters
names<- stringi::stri_rand_strings(100,20)
  # Some random numbers
numbers<- runif(100,0,100000)
  # a df 
df<- as.data.frame(cbind(names, numbers))

shinyApp(
ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    absolutePanel(id="panel", fixed = FALSE,
                  draggable = F, top = 80, left = "auto", right = 60, bottom = "auto",
                  width = 290, height = 370,
                  box( title = "Box example",
                       status = "warning", width = 230, solidHeader = T,
                       pickerInput(
                         inputId = "select_nb_names", 
                         choices = names,
                         multiple = TRUE, 
                         selected = NULL, 
                         width = 190,inline = FALSE),
                       # the textoutput that only has an x-axis scrollbar
textOutput("TextThatIWantToHaveAScroll",container = pre ))))),


server <-  function(input, output, session) {
  output$TextThatIWantToHaveAScroll<- renderText(
    paste0( input$select_nb_names," : ",df$numbers[df$names%in%input$select_nb_names],"\n"))


}

# Run the application 
)


1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете добавить свитки, используя CSS. В блестящем, используйте тег tags$style, чтобы определить свойства css и оберните в тег tags$head. Вы можете выбрать целевой элемент, используя идентификатор элемента вывода (т. Е. #TextThatIWantToHaveAScroll), блестящий класс для вывода текста (т. Е. shiny-text-output) или имя тега (т. Е. pre). Если у вас есть более одного элемента, который должен получить одно и то же лечение, тогда лучше использовать .shiny-text-output.

Чтобы создать прокрутку для нужного элемента (как в примере; с использованием идентификатора), сначала установите свойства высоты и ширины, а затем используйте overflow: scroll. Например:

#TextThatIWantToHaveAScroll {
   width: 100%;
   height: 60px;
   overflow: scroll;
}

Отрегулируйте высоту и ширину по необходимости. Доступны и другие варианты прокрутки. См. Руководство Mozilla CSS по свойству overflow. Вот полный пример:

# Shiny example 
library(shinydashboard)
library(shiny)
library(stringi)
library(shinyWidgets)

# Data 
# Some random letters
names<- stringi::stri_rand_strings(100,20)
# Some random numbers
numbers<- runif(100,0,100000)
# a df 
df<- as.data.frame(cbind(names, numbers))

shinyApp(
    ui <- dashboardPage(
        dashboardHeader(),
        dashboardSidebar(),
        dashboardBody(
            tags$head(
                tags$style(
                    "#TextThatIWantToHaveAScroll {
                        width: 100%;
                        height: 60px;
                        overflow: scroll;
                    }"
                ),
            ),
            absolutePanel(id="panel", fixed = FALSE,
                          draggable = F, top = 80, left = "auto", right = 60, bottom = "auto",
                          width = 290, height = 370,
                          box( title = "Box example",
                               status = "warning", width = 230, solidHeader = T,
                               pickerInput(
                                   inputId = "select_nb_names", 
                                   choices = names,
                                   multiple = TRUE, 
                                   selected = NULL, 
                                   width = 190,inline = FALSE),
                               # the textoutput that only has an x-axis scrollbar
                               textOutput("TextThatIWantToHaveAScroll",container = pre))))),


    server <-  function(input, output, session) {
        output$TextThatIWantToHaveAScroll<- renderText(
            paste0( input$select_nb_names," : ",df$numbers[df$names%in%input$select_nb_names],"\n"))


    }

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