我正在用R中的gwidgets包编写一个GUI,我正在实现一个工具,它允许用户从一个列表中选择一些变量,并将它们拖到一个空的列表中进行收集。灵感来自SPSS的图形用户界面,请参阅链接:
spss drag and drop
我打算用两个gtable来实现这一点,即首先创建一个包含变量列表的gtable,然后创建一个空gtable来收集选定的变量。下面是我的示例代码:
portfolioBuilder <- function(h,...){
## globals
widgets <- list()
varNames <- c("var1","var2","var3","var4" )#with(.GlobalEnv, names(data))
#window
win <- gwindow("Test")
#groups
g <- ggroup(horizontal = FALSE, container = win, expand = TRUE)
gg <- ggroup(horizontal = FALSE, container = win, expand = TRUE)
#graphics container
ggraphics(container = gg)
#paned group
pg <- gpanedgroup(container = g, expand = TRUE)
nb <- gnotebook(container = pg)
## main group
qpg <- ggroup(horizontal = FALSE, container = nb, label = "portfolio")
parg <- ggroup(horizontal = FALSE, container = nb, label = "portfolio args")
## qplot group
tbl <- glayout(container = qpg)
#variable list
tbl[1,1,anchor = c(1,0)] <- "Variables"
tbl[2:10,2] <- (widgets[["table"]] <- gtable(varNames, multiple = TRUE, container = tbl, expand = TRUE))
tbl[3,3, anchor = c(1,0)] <- "y"
tbl[3,4] <- (widgets[["y"]] <- gedit("", container = tbl))
tbl[4,3, anchor = c(1,0)] <- "x"
tbl[4,4] <- (widgets[["x"]] <- gtable(c(""),container = tbl))
## make table visible and set tab
visible(tbl) <- TRUE
svalue(nb) <- 1
##################################end layout#################################
}
但是,由于gtable小部件为空,我的示例代码显示了一个错误。有没有人知道如何使用gwidgets来实现这一点?
发布于 2012-09-15 05:15:02
您可能想要处理布局,但关键是addDropSource和addDropTarget:
options(guiToolkit="RGtk2")库(GWidgets)
w <- gwindow(visible=FALSE)
g <- gpanedgroup(cont=w)
tbl <- gtable(names(mtcars), cont=g)
fl <- gframe("variables", horizontal=FALSE, cont=g)
dep <- gedit(initial.msg="Dependent variable", label="Dependent", cont=fl)
ind <- gedit(initial.msg="Independent variable(s)", label="Independent", cont=fl)
addDropSource(tbl, handler=function(h,...) svalue(h$obj))
addDropTarget(dep, handler=function(h,...) svalue(h$obj) <- h$dropdata)
addDropTarget(ind, handler=function(h,...) {
cur <- svalue(h$obj)
new <- ifelse(nchar(cur) > 0, paste(cur, h$dropdata, sep=", "), h$dropdata)
svalue(h$obj) <- new
})
visible(w) <- TRUE
gWidgets中的拖放支持确实是多变的。在gWidgetsRGtk2、gWidgets2RGtk2、gWidgetstcltk、gWidgets2tcltk、gWidgetsQt和gWidgets2Qt这6种可能的代码中,这段代码只在gWidgetsRGtk2中有效。
https://stackoverflow.com/questions/12426501
复制相似问题