1

Rでgwidgetsパッケージを使用してGUIを作成しています。ユーザーが1つのリストから多数の変数を選択し、それらを空のリストにドラッグして収集できるようにするツールを実装しています。インスピレーションはSPSSからのGUIです。リンクを参照してください。

spssドラッグアンドドロップ

私はこれを2つのgtableで行うことを計画していました。つまり、最初に変数のリストを使用して1つの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でこれを達成する方法を知っていますか?

4

1 に答える 1

2

レイアウトで作業する必要がありますが、これの鍵は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でのドラッグアンドドロップのサポートは実際には可変です。これが機能する6つの可能性のうち、gWidgetsRGtk2、gWidgets2RGtk2、gWidgetstcltk、gWidgets2tcltk、gWidgetsQt、gWidgets2QtこのコードはgWidgetsRGtk2でのみ機能しました。

于 2012-09-14T21:15:02.487 に答える