2013-02-18 15 views
0

我是R world的新手,我在使用gWidgets時遇到一些困難,我希望有人能幫助我。首先我的R版本是2.15.2,而且我使用的是Windows 7 32位。R gWidgets刪除參數並傳遞參數

我想創建一個帶有輸入/輸出和選擇(是,否)的GUI,因此如果用戶選擇(使用gradio)「是」,將顯示一組額外的參數,如果「否」,則它應該消失(這些參數),或灰色。最後,如果用戶點擊確定按鈕,那麼它將傳遞一些參數(稍後將用於調用另一個函數)。 這裏是我的問題:

  1. 你有一個想法,我怎麼能刪除參數,當用戶選擇「否」,現在,如果我點擊沒有,它打印我想要的東西,但是當我點擊「是「,它會顯示另外三個參數。
  2. 你知道我可以傳遞參數,當用戶點擊「確定」,這是爲以後當單擊確定,它會調用(或源)在不同的R代碼中的另一個功能

很多感謝爲您提供所有幫助

Cesar

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)) 

回答

3

你有多種選擇:

  • 您可以將額外的參數爲gexpandgroup小部件,並調用可見< - 此方法。這將切換顯示他們。您可以在未附加到父容器(未在構造函數中爲cont = ...)的(子)容器中創建小部件,然後添加(parent,child)以添加和刪除(父母,孩子)刪除。這不應該刪除在rm意義上的部件,只是從屏幕上刪除他們

  • 您可以將額外的參數放入一個容器,並調用啓用< - 用FALSE將它們「灰色」出來。

前兩個可能需要一些屏幕尺寸管理。

在所有情況下,子程序在程序中仍然可以設置和讀取,所以您應該在那裏使用默認值或者在使用時進行一些檢查。

至於傳遞參數R中的一個好方法是將控件插入列表中,比如l。然後這個成語

out <- sapply(l, svalue) 

將它們捆綁到一個列表中,可以傳遞給你的函數。 do.call函數可以輕鬆地將列表作爲參數使用。

+0

非常感謝約翰(@jverzani),我會根據您的意見對其進行修改,但有一兩件事,當我試圖設置默認值(即fieldConstrainDir_v < - gedit(「」,container = g,default = 0))沒有傳遞值,我做錯了什麼? – Cesar 2013-02-18 23:30:22

+0

您可能需要'gedit(「0」,container = g,coerce.with = as.numeric)'。沒有'default'參數。 (coerce.with函數是在svalue之前的字符串上調用的。) – jverzani 2013-02-19 01:46:00

+0

嗨John(@jverzani),感謝您的幫助,我根據您的意見修改了代碼,並且能夠將參數傳遞到列表中,I因爲我需要單獨的參數,所以將它更改爲lapply。但是,我仍然感到困惑,無法根據我在gcombobox中的選擇來提取和分配變量名稱。更清楚的是,如果我選擇「Dis」,那麼我需要加載具有函數「Dis.r」的腳本,並選擇適當的參數,如果選擇「IDis」,然後加載並運行(使用適當的參數名稱)「IDis.r」代碼。這是代碼示例: – Cesar 2013-02-20 22:56:52

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) 

當我打印,正顯示出我的變量名和值,我要的是能夠使用變量(具有相同的名稱作爲我的「派息.r「)和do。調用根據我的選擇運行r腳本。

非常感謝 ç