0

我是 R 世界的新手,在使用 gWidgets 时遇到了一些困难,我希望有人可以帮助我。首先,我的 R 版本是 2.15.2。,我使用的是 Windows 7 32 位。

我想创建一个带有输入/输出和选择(是,否)的 GUI,所以如果用户选择(使用渐变)“是”,将显示一组额外的参数,如果“否”,那么它应该消失(这些参数),或灰显。最后,如果用户单击确定按钮,那么它将传递一些参数,这些参数将用于(稍后)调用另一个函数。以下是我的问题:

  1. 您是否知道当用户选择“否”时如何删除参数,现在,如果我单击“否”,它会打印我想要的内容,但是当我再次单击“是”时,它会显示另外三个参数。
  2. 你知道当用户单击“确定”时我如何传递参数吗,这是为了稍后单击确定时,它将调用(或源)不同的r代码中的另一个函数

非常感谢您的所有帮助

塞萨尔

PS下面是我的代码:

require(gWidgets)
options("guiToolkit"="RGtk2")

#options(expressions=500000)
w <- gwindow("")
g <- ggroup(horizontal = FALSE, container = w)

glabel("Input/Output", container = g)
inputFileDir <- gfilebrowse (text = "Select file...", type = "open", quote = FALSE,
             filter = list("Text File" = list(patterns = c("*.txt"))), container = g)
svalue(inputFileDir)

outputFileDir <- gfilebrowse (text = "Input file name...", type = "save", quote = FALSE,
                             filter = list("Text File" = list(patterns = c("*.txt"))), container = g)
svalue(outputFileDir)

glabel("Direction?", container = g)
DirSelec <- c("Yes","No")
rbF <- function(h,...){
  if (svalue(h$obj, index=TRUE) == 1){
    print ( "define handler here" )

    glabel("Meridional (Raster file):", container = g)
    fieldConstrainDir_v <- gedit("", container = g, default = 0)
    svalue(fieldConstrainDir_v)

    glabel("Zonal (Raster file):", container = g)
    fieldConstrainDir_u <- gedit("", container = g, default = 0)
    svalue(fieldConstrainDir_u)

    glabel("Max. Angle:", container = g)
    maxAng <- gedit("", width = 3, initial.msg = "Paste the path to the raster file (no extensions)", default = 0, container = g)
    svalue(maxAng)
  }else {
    #(svalue(h$obj, index=TRUE) == 2)
    print ( "When User click NO, it needs to go or gray out" )
  }
}

rb <- gradio(DirSelec, container = g)
selected = svalue(rb, index=TRUE) <- 2
rbH <- addHandlerClicked(rb, handler = rbF)

bg <- ggroup(container = g)
addSpring(bg)
onOK <- function(h,...){
  print(svalue(inputFileDir))
  #chartr("\\", "/", print(svalue(inputFileDir)))
  print(svalue(outputFileDir))
  print(svalue(fieldConstrainDir_v))
  print(svalue(fieldConstrainDir_u))
  print(svalue(maxAng))

}

gbutton("    OK    ", container = bg, handler = onOK)
gbutton(" Cancel ", container=bg, handler = function(h,...) dispose(w))
4

2 回答 2

3

您有多种选择:

  • 您可以将额外的参数放入 gexpandgroup 小部件中并在其上调用 visible<- 方法。这将切换显示它们。

  • 在 gWidgetsRGtk2 中,您可以在未附加到父容器的(子)容器中创建小部件(构造函数中没有 cont=...),然后添加(父,子)以添加和删除(父,子)去除。这不应该删除 rm 意义上的小部件,只需将它们从屏幕上删除

  • 您可以将额外的参数放入容器中并调用 enabled<- 并使用 FALSE 将它们“变灰”。

前两个可能需要一些屏幕尺寸管理。

在所有情况下,子控件在程序期间仍然是可设置和可读的,因此您应该在其中设置默认值或在使用它们时进行一些检查。

至于在 R 中传递参数的一个好方法是将控件小部件放入一个列表中,比如 l。那么这个成语

out <- sapply(l, svalue)

将它们捆绑到可以传递给您的函数的列表中。该do.call函数使使用列表作为参数变得容易。

于 2013-02-18T22:28:41.257 回答
0

这是代码:

require(gWidgets)
w <- gwindow("") 
g <- ggroup(cont = w, horizontal = FALSE) 
g1 <- ggroup(cont = w) 
Vl <- list () 

fr3 <- gframe ("", cont=g, horizontal=FALSE) 
l3 <- glayout ( cont = fr3 , expand=TRUE) 
l3 [1,1] <- NbS <- glabel("Type", cont = l3) 
l3 [1,2] <- (Vl$NbS <- gcombobox (c("Dis","IDis","K"), cont = l3)) 

fr4 <- gframe ("", cont=g, horizontal=FALSE) 
l4 <- glayout (cont=fr4, expand = TRUE) 
l4 [1,1] <- Dm <- glabel("Dist", cont = l4) 
l4 [1,2] <- (Vl$Dm <- gedit("0", cont = l4))

rbC <- function (h,...){ 
  out <- lapply(Vl, svalue) 
  print(out) 
  if (out$NbS == "Dis") {
    print("Dis") 
    print(out$Dm) 
    # Dm <- get(out$Dm, get(svalue(Dm))) 
    # Dm <- get(out$Dm) 
    # dsrc <- source(".../Dis.r") 
    # print (do.call (dsrc, out)) 
    } else if (out$NbSelec == "IDis") {
      print("IDis") 
      }
  } 
ok <- gbutton("OK", cont = g1, handler=rbC) 

当我打印时,向我显示变量名称和值,我想要的是能够使用变量(与我的“Dis.r”中的名称相同)并使用 do.call 运行 r 脚本,具体取决于我的选择。

非常感谢 C

于 2013-02-21T03:21:31.770 回答