gpt4 book ai didi

colors - Shiny 的checkboxgroupinput动态背景颜色控制

转载 作者:行者123 更新时间:2023-12-01 22:49:41 25 4
gpt4 key购买 nike

我正在设计一个完全动态的用户界面,目的是为了用 Shiny 的方式进行演示。我的 list 上有几个步骤,我正在一个接一个地进行。

  1. 自定义由函数“checkboxGroupInput”生成的多选框的背景颜色
  2. 使复选框更加动态 - 当选择/取消选择一个复选框时背景颜色将打开/关闭

我在另一篇文章中得到了解决方案,并且效果很好。 ( how to make the checkboxgroupinput color-coded in Shiny ) 这是我得到的代码:

my_checkboxGroupInput <- function(variable, label, choices, selected, colors){
choices_names <- choices
if(length(names(choices))>0) my_names <- names(choices)
div(id=variable,class="form-group shiny-input-checkboxgroup shiny-input-container shiny-bound-input",
HTML(paste0('<label class="control-label" for="',variable,'">',label,'</label>')),
div( class="shiny-options-group",
HTML(paste0('<div class="checkbox" style="color:', colors,'">',
'<label>',
'<input type="checkbox" name="', variable,
'" value="', choices,
'"', ifelse(choices %in% selected, 'checked="checked"', ''),
'/>',
'<span>', choices_names,'</span>',
'</label>',
'</div>', collapse = " "))
)
)
}

library(shiny)
my_names <- c('one'=1,'two'=2,'three'=3)
my_selected <- c(1,2)
my_colors <-c('blue','red','green')
shinyApp(
ui=fluidPage(uiOutput("my_cbgi")),
server = function(input, output, session) {
output$my_cbgi <- renderUI(my_checkboxGroupInput("variable", "Variable:",
choices = my_names,
selected=my_selected,
colors=my_colors))
}
)

现在,我希望事情变得更加动态 - 我更喜欢为 N 个选定的项目分配前 N 个颜色,而不是永久地为选项分配颜色。不幸的是,我定制的代码不能按我想要的方式工作。

例如,我有 6 种颜色,并且默认选择所有六个变量,当我取消选中(二、三、四、五)中的任何一个时,我假设取消选中后的颜色将会更新适本地。假设 ('蓝色','红色','绿色','紫色','柠檬','棕色') AND ('一','二','三' ,'四','五','六');当我取消选中“三”时,我想看到 ('一','二', '四','五','六'),但实际颜色是('蓝色','红色','紫色','柠檬','蓝色')

这是我用于测试的代码:

my_names <- c('one','two','three','four','five','six')
my_selected <- c('one','two','three','four','five','six')
my_colors <-c('blue','red','green','purple','lemon','brown')

shinyApp(ui=fluidPage(uiOutput("my_cbgi")),

server = function(input, output, session) {
my <- reactiveValues(selected=my_selected)
observeEvent(input$variable,{my$selected <- input$variable})
output$my_cbgi <- renderUI(my_checkboxGroupInput("variable", "Variable:",
choices = my_names,
selected=my$selected,
colors=my_colors[1:length(my$selected)]))
})

最佳答案

这是该函数的更新版本,它将为您提供预期的结果。它使用observeEvent的ignoreNULL参数来跟踪最后一个复选框的取消选中。我必须添加一个变量来忽略第一个调用,该调用将取消选择所有初始选择:

my_checkboxGroupInput <- function(variable, label, choices, selected, colors){
choices_names <- choices
if(length(names(choices))>0) choices_names <- names(choices)
my_colors <- rep("black", length(choices))
is_selected <- choices %in% selected
my_colors[is_selected] <- colors[1:sum(is_selected)]
div(id=variable,class="form-group shiny-input-checkboxgroup shiny-input-container shiny-bound-input",
HTML(paste0('<label class="control-label" for="',variable,'">',label,'</label>')),
div( class="shiny-options-group",
HTML(paste0('<div class="checkbox" style="color:', my_colors, '">',
'<label>',
'<input type="checkbox" name="', variable,
'" value="', choices,
'"', ifelse(is_selected, 'checked="checked"', ''),
'/>',
'<span>', choices_names,'</span>',
'</label>',
'</div>', collapse = " "))
)
)
}


my_names <- c('one','two','three','four','five','six')
my_selected <- c('one','two','three','four','five','six')
my_colors <-c('blue','red','green','purple','lemon','brown')

shinyApp(ui=fluidPage(uiOutput("my_cbgi")),

server = function(input, output, session) {
my <- reactiveValues(selected=my_selected, firt_call_ignore=TRUE)
output$my_cbgi <- renderUI(my_checkboxGroupInput("variable", "Variable:",
choices = my_names,
selected=my$selected,
colors=my_colors ))
observeEvent(input$variable,{
if(my$firt_call_ignore)
my$firt_call_ignore=FALSE
else
my$selected <- input$variable
}, ignoreNULL = FALSE)
})

关于colors - Shiny 的checkboxgroupinput动态背景颜色控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886018/

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