Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays gWidgets为多个列返回多个响应_Arrays_Gwidgets - Fatal编程技术网

Arrays gWidgets为多个列返回多个响应

Arrays gWidgets为多个列返回多个响应,arrays,gwidgets,Arrays,Gwidgets,我之前发布过这篇文章,但并没有找到一个单一回复的解决方案。我尝试了另一种方法,主要是让我得到我想要的。当前的解决方案如果放在一个对话框中,效果会更好,但我不知道如何做到这一点。我正在把我在Nabble和stack上找到的其他解决方案放在一起,只是无法得到我需要的。我希望下面在一个窗口中提供选项,而不是让用户输入到3个单独的框中。请帮忙 options(guiToolkit="RGtk2") library(gWidgets) #Creat selection function select &l

我之前发布过这篇文章,但并没有找到一个单一回复的解决方案。我尝试了另一种方法,主要是让我得到我想要的。当前的解决方案如果放在一个对话框中,效果会更好,但我不知道如何做到这一点。我正在把我在Nabble和stack上找到的其他解决方案放在一起,只是无法得到我需要的。我希望下面在一个窗口中提供选项,而不是让用户输入到3个单独的框中。请帮忙

options(guiToolkit="RGtk2")
library(gWidgets)
#Creat selection function
select <- function(x,multiple = TRUE, Title,...){
  ans<-new.env()

  x1<-ggroup(horizontal=TRUE) # no parent container here
  x2<-gcheckboxgroup( x,multiple=multiple,con=x1,expand=TRUE)
  ret <- gbasicdialog(title = Title, widget=x1,handler=function(h,...){
    value <- svalue(x2)
    if (length(value)==0) value=""
    assign("selected",value,env=h$action$env)
    dispose(x1)
  },action=list(env=ans))
  ans
}   
#Create list to store results
Days. <- c("Day1","Day2","Day3")
Outputs_ <- list()
SelectionOptions. <- c("Bicycle Event1", "Construction Nearby","Path Closure")

#Cycle through each day 
for(day in Days.){      
    ans <- select(SelectionOptions., Title = day)
    Outputs_[[day]] <- ans$selected
}
#return results of selection
unlist(Outputs_)
选项(guiToolkit=“RGtk2”) 库(gWidgets) #创建选择函数
选择您将使其变得比需要的复杂一点

  • 最好是使事情异步(在大多数情况下),在选择值时使用要调用的处理程序

  • 但是,如果您希望这样做,请为您的选择小部件创建一个容器,然后将它们添加到容器中。然后将该容器传递到对话框中。这样所有的东西都会显示在一个窗口中。使用
    gWidgets2
    可以更轻松地使用基本对话框


好的,下面是一个例子,虽然我不太确定您要解决什么问题,所以可能会关闭:

library(gWidgets2)

Days. <- c("Day1","Day2","Day3")
SelectionOptions. <- c("Bicycle Event1", "Construction Nearby","Path Closure")

w <- gwindow()
g <- gformlayout(cont=w)
days <- gradio(Days., cont=g, label="Days:")
opts <- gcombobox(SelectionOptions., cont=g, label="Options:")

btn <- gbutton("Show them", cont=g, label="")

addHandlerClicked(btn, handler=function(h,...) {
    values <- lapply(list(days, opts), svalue)
    print(values)
})

## or using a modal dialog

dlg <- gbasicdialog(handler=function(h,...) {
    values <- lapply(list(days, opts), svalue)
    print(values)
})
g <- gformlayout(cont=dlg)
days <- gradio(Days., cont=g, label="Days:")
opts <- gcombobox(SelectionOptions., cont=g, label="Options:")
visible(dlg, TRUE)

## third time is a charm? (Though you could clean this up)
library(gWidgets2)
e <- new.env()
e$Days <- ""; e$Sel <- ""

Days. <- c("Day1","Day2","Day3")
SelectionOptions. <- c("Bicycle Event1", "Construction Nearby","Path Closure")

dlg <- gbasicdialog(title="test", do.buttons=FALSE)
g <- ggroup(cont=dlg, horizontal=FALSE)

fl <- gformlayout(cont=g)
days <- gradio(Days., cont=fl, label="Days:")
cb <- gcombobox(SelectionOptions., selected=0, cont=fl, label="Options:")

handler <- function(h,...) {
    e$Days <- svalue(days)
    e$Sel <- ifelse(length(svalue(cb)) > 0, svalue(cb), "")
    if (all(sapply(e, function(x) nchar(x) > 0)))
        dlg$dispose_window()
}
sapply(list(days, cb), addHandlerChanged, handler=handler)
visible(dlg, TRUE)
库(gWidgets2)

天。我一直在为这个小部件软件包苦苦挣扎,你认为你能提供一个有效的例子吗?非常感谢!你提供的例子并不正确;似乎对我不起作用。在gwindow或gformlayout中,似乎需要进行不同的设置。可以肯定的是,我试图解决的问题是创建一个弹出窗口,在为多个项目选择复选框之前,该窗口将停止我的流程。第二个带有
gbasicdialog
的表单将完成此操作。您可能希望向控件添加处理程序,如
days
opts
,以检查何时所有控件都有选择。我已经在示例中添加了这一点。感谢您的耐心。gformlayout仍然没有;我的建筑似乎不正确。我得到错误:error in.makeForm(lst,mainGroup,e):参数“lst”丢失,没有默认值确保您正在尝试
gWidgets2
--而不是
gWidgets
。我确实让示例起作用了,您是对的,我正在加载gWidgets2库,这导致了问题,但我需要做的另一件事是加载库
library(gWidgets2)
days <- paste("Day", 1:3)
events <- c("none", "Bicycle Event","Construction Nearby","Path Closure")
l <- list()

handler <- function(h,...) {
    l[[h$action]] <<- svalue(h$obj)
    if(length(l) == 3)
        print(l)
}

w <- gwindow()
g <- gvbox(cont=w)
for (day in days) {
    l <- glabel(day, cont=g); font(l) <- list(weight="bold")
    gradio(events, cont=g, handler=handler, action=day)
}