2013-02-07 56 views
2

中立即更新gedit箱我正在嘗試使用gWidgetsRGtk2創建一個GUI,用於我在R中編寫的程序。我的GUI具有gedit()文本框用戶可以在其中鍵入輸入數據文件的文件路徑以將其放入程序中。它還有一個「瀏覽」按鈕,點擊後可打開一個gfile()框,以便他們可以瀏覽他們想要的文件。在用戶使用'瀏覽'按鈕選擇文件後,我遇到的問題是更新我的gedit()框中的值。下面的代碼會說明清楚:如何在使用gfile指定文件路徑後使用gWidgetsRGtk2在R

dir <- getwd() 
sfilepath <- paste0(dir,"/") 
win = gwindow("Set Parameters:",width=400,height=550) 
nb = gnotebook(cont=win) 
tab2 <- glayout(cont=nb, label = "Advanced Settings") 
tab1 <- glayout(cont=nb, label = "Basic Settings") 
tab1[2,2] <- glabel("BD:",cont=tab1) 
tab1[2,4:5] <- gedit(1,cont=tab1) 
addhandlerkeystroke(tab1[2,4],handler=function(h,...){BD <<- as.numeric(svalue(h$obj))}) 
tab1[3,2:5] <- gseparator(cont=tab1) 
tab1[4,2:5] <- glabel("File path:",cont=tab1) 
tab1[5,2:4] <- gedit(paste0(dir,"/"),cont=tab1) 
tab1[5,5] <- gbutton(text="Browse", handler=function(h,...){ gfile("Select a file",type="open", filter = list("text files" = list(patterns = c("*.csv","*.txt")), "R files" =list(patterns = c("*.R","*.Rdata"))), handler = function(h,...){ sfilepath <<- h$file},cont=TRUE)},cont=tab1) 
addhandlermousemotion(tab1[5,2],handler=function(h,...){svalue(h$obj) <- sfilepath}) 

到目前爲止,我使用​​都試過了,在上面的代碼,所以在gedit()框中的文本,當你將鼠標移動到盒子本身才會更新。但是,如果盒子中的文本立即更新,我更喜歡它。

我也嘗試過使用addhandleridle(),間隔爲1秒,這樣框中的文本會自動更新,每隔1秒。這工作。但是,它使得無法正確輸入框,因爲在保存輸入的新'文件路徑'之前,文本框正在使用舊的'filepath'更新。

我是初學者(我已經編寫了一個工作程序,但是一旦我離開,它就需要被其他人使用,所以在上週五決定,我應該弄清楚如何使它成爲一個GUI)。所以任何人都可以提供的幫助將不勝感激。

回答

2

這是你想要的圖案(傳遞處理程序,以gfilebrowse):

w <- gwindow("test") 
g <- ggroup(cont=w, horizontal=FALSE) 
file_upload <- gfilebrowse(cont=g, handler=function(h,...) { 
    svalue(e) <- svalue(h$obj) 
}) 
e <- gedit("", cont=g) 
+0

傳奇!非常感謝你的幫助。 –

+0

我可以知道gedit是做什麼的嗎?如果我添加它,我有兩行來輸入輸入,但如果我把它放在外面,代碼不起作用。 –

+1

這就是要求提出的問題。我可能應該使用'gfile'和一個按鈕來調用它,因爲'gfilebrowse'已經有了這樣一個小部件。沒有'e'小部件的代碼失敗的唯一原因是處理程序調用引用它。 – jverzani

相關問題