0

私は R の世界が初めてで、gWidgets の操作に問題があります。誰かが私を助けてくれることを願っています。まず、R のバージョンは 2.15.2 で、Windows 7 32 ビットを使用しています。

入力/出力と選択 (はい、いいえ) を使用して GUI を作成したいので、ユーザーが (gradio を使用して) 「はい」を選択すると、追加のパラメーター セットが表示され、「いいえ」の場合は表示されなくなります (これらのパラメーター)、またはグレー表示されます。最後に、ユーザーが [OK] ボタンをクリックすると、(後で) 別の関数を呼び出すために使用されるいくつかのパラメーターが渡されます。ここに私の質問があります:

  1. ユーザーが「いいえ」を選択したときにパラメーターを削除する方法を知っていますか? いいえをクリックすると、必要なものが印刷されますが、もう一度「はい」をクリックすると、別の 3 つのパラメーターが表示されます。
  2. ユーザーが「OK」をクリックしたときに引数を渡す方法を知っていますか?

ご協力いただきありがとうございました

セザール

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 の意味でウィジェットを削除するのではなく、画面から削除するだけです

  • 追加のパラメーターをコンテナーに配置し、FALSE を指定して enabled<- を呼び出して、それらを「グレー表示」することができます。

最初の 2 つは、画面サイズの管理が必要になる場合があります。

すべての場合において、子コントロールはプログラム中に設定可能で読み取り可能であるため、デフォルト値を設定するか、それらを使用するときにチェックを行う必要があります。

パラメータを渡すことに関しては、R 内での良い方法は、コントロール ウィジェットをリストに入れることです。それからこのイディオム

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」と同じ名前)を使用できるようにすることです。選択。

どうもありがとう C

于 2013-02-21T03:21:31.770 に答える