gpt4 book ai didi

r - 在 Shiny 的应用程序中以模式生成进度条,自动关闭

转载 作者:行者123 更新时间:2023-12-01 22:00:31 24 4
gpt4 key购买 nike

我正在开发一个 Shiny 的应用程序,需要很长时间才能进行计算,我希望有一个模态进度条,可以在所有计算完成后自动关闭。

理想的解决方案有两个特点

  1. 覆盖大部分屏幕并阻止用户与应用交互
  2. 计算完成后自动关闭

我在以下问题中找到了这个解决方案:

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)

这解决了问题 1,但我必须单击“dismiss”才能查看结果

最佳答案

shiny中提供的原始progressbar正是您所需要的。

但我使用 css 使 progessbar 显示在屏幕中间。

进度条的使用详情可以在shiny here中找到.

library("shiny")

ui <- fluidPage(
actionButton(inputId = "go", label = "Launch long calculation"), #, onclick = "$('#my-modal').modal().focus();"

# css to center the progress bar
tags$head(
tags$style(
HTML(".shiny-notification {
height: 100px;
width: 800px;
position:fixed;
top: calc(50% - 50px);
left: calc(50% - 400px);
font-size: 250%;
text-align: center;
}
"
)
)
)
)

server <- function(input, output, session) {

value <- reactiveVal(0)

observeEvent(input$go, {
withProgress(message = 'Calculation in progress', value = 0,detail="0%", {
# run calculation
for (i in 1:10) {
Sys.sleep(0.5)
newValue <- value() + 1
value(newValue)
incProgress(1/10,detail = paste0(i*10,"%"))
}
Sys.sleep(0.5)
})
})

}

shinyApp(ui = ui, server = server)

关于r - 在 Shiny 的应用程序中以模式生成进度条,自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com