调整闪亮进度条的大小并将其居中 [英] Adjust size of Shiny progress bar and center it
问题描述
我正在使用Shiny应用程序,需要计算流程,并且在执行计算进度时,我使用progressBar
来显示流程.
I'm working with a Shiny app where I need to calculate processes and while the calc progress is executing, I'm using a progressBar
to show the process.
问题是进度条太小,我不喜欢显示的方式.
The problem is that the progress bar is too small, and I don't like the way is shown.
所以,我在想,也许有一种方法可以使用Shiny模式来实现进度条(有一个名为modalDialog
的函数).
So, I was thinking that maybe there's a way to implement a progress bar using a Shiny modal (there's a function called modalDialog
).
我的想法是,当用户运行calc时,将打开一个显示progressBar
的模式.
My idea is that when the user runs the calc, a modal will be opened showing a progressBar
.
这是进度代码:
withProgress(message = 'Runing GSVA', value = 0, {
incProgress(1, detail = "This may take a while...")
functionToGenerate()
})
有什么主意吗?
推荐答案
您好,我在软件包 shinyWidgets
,您可以将其放在模式中,但与shiny::showModal
一起使用时会比较棘手,因此您可以手动创建自己的模式,如下所示.编写的代码更多,但效果很好.
Hi i wrote a progress bar function in the package shinyWidgets
, you can put it in a modal, but it's tricky to use with shiny::showModal
, so you can create your own modal manually like below. It's more code to write but it works fine.
library("shiny")
library("shinyWidgets")
ui <- fluidPage(
actionButton(inputId = "go", label = "Launch long calculation"), #, onclick = "$('#my-modal').modal().focus();"
# You can open the modal server-side, you have to put this in the ui :
tags$script("Shiny.addCustomMessageHandler('launch-modal', function(d) {$('#' + d).modal().focus();})"),
tags$script("Shiny.addCustomMessageHandler('remove-modal', function(d) {$('#' + d).modal('hide');})"),
# Code for creating a modal
tags$div(
id = "my-modal",
class="modal fade", tabindex="-1", `data-backdrop`="static", `data-keyboard`="false",
tags$div(
class="modal-dialog",
tags$div(
class = "modal-content",
tags$div(class="modal-header", tags$h4(class="modal-title", "Calculation in progress")),
tags$div(
class="modal-body",
shinyWidgets::progressBar(id = "pb", value = 0, display_pct = TRUE)
),
tags$div(class="modal-footer", tags$button(type="button", class="btn btn-default", `data-dismiss`="modal", "Dismiss"))
)
)
)
)
server <- function(input, output, session) {
value <- reactiveVal(0)
observeEvent(input$go, {
shinyWidgets::updateProgressBar(session = session, id = "pb", value = 0) # reinitialize to 0 if you run the calculation several times
session$sendCustomMessage(type = 'launch-modal', "my-modal") # launch the modal
# run calculation
for (i in 1:10) {
Sys.sleep(0.5)
newValue <- value() + 1
value(newValue)
shinyWidgets::updateProgressBar(session = session, id = "pb", value = 100/10*i)
}
Sys.sleep(0.5)
# session$sendCustomMessage(type = 'remove-modal', "my-modal") # hide the modal programmatically
})
}
shinyApp(ui = ui, server = server)
这篇关于调整闪亮进度条的大小并将其居中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!