[R] How to mimic select.list using RGtk2/gWidgetsRGtk2?
John Verzani
verzani at math.csi.cuny.edu
Sat Dec 13 06:12:20 CET 2008
ronggui <ronggui.huang <at> gmail.com> writes:
>
> I want to write a function mimic the function of select.list(), here
> is my preliminary version.
>
> select <- function(x,multiple=TRUE,...){
> ans<-new.env()
> g <- gwindow(title=title,wid=200,heigh=500)
> x1<-ggroup(FALSE,con=g)
> x2<-gtable(x,multiple=multiple,con=x1,expand=TRUE)
> gbutton("OK",con=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
> }
>
Hi,
You can call foo in the handler above or for gWidgetsRGtk2 use gbasicdialog
which will create a modal dialog:
options(guiToolkit="RGtk2")
library(gWidgets)
select <- function(x,multiple=TRUE,...){
ans<-new.env()
x1<-ggroup(horizontal=FALSE) # no parent container here
x2<-gtable(x,multiple=multiple,con=x1,expand=TRUE)
ret <- gbasicdialog(title="select a widget", 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
}
ans <- select(c("a","b"))
print(ans$selected)
Hope that helps.
> However, it doesn't behave as what I want. What I want is that: for
> {select(c("a","b")); foo()}, foo() only runs after I have clicked the
> OK button of select(). Any hints?
>
> Thanks.
More information about the R-help
mailing list