首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R gWidgets在两个gtable之间拖放

R gWidgets在两个gtable之间拖放
EN

Stack Overflow用户
提问于 2012-09-14 22:24:54
回答 1查看 790关注 0票数 1

我正在用R中的gwidgets包编写一个GUI,我正在实现一个工具,它允许用户从一个列表中选择一些变量,并将它们拖到一个空的列表中进行收集。灵感来自SPSS的图形用户界面,请参阅链接:

spss drag and drop

我打算用两个gtable来实现这一点,即首先创建一个包含变量列表的gtable,然后创建一个空gtable来收集选定的变量。下面是我的示例代码:

代码语言:javascript
运行
复制
  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来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-15 05:15:02

您可能想要处理布局,但关键是addDropSource和addDropTarget:

options(guiToolkit="RGtk2")库(GWidgets)

代码语言:javascript
运行
复制
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中有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12426501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档