如何在使用gfile指定文件路径后立即更新gedit框,使用g中的gWidgetsRGtk2

时间:2013-02-07 00:05:29

标签: r user-interface gwidgets

我正在尝试使用gWidgetsRGtk2为我用R编写的程序创建一个GUI。我的GUI有一个gedit()文本框,用户可以在其中键入输入数据的文件路径要放入程序的文件。它还有一个“浏览”按钮,单击该按钮可打开gfile()框,以便他们可以浏览他们想要的文件。我遇到的问题是在用户使用“浏览”按钮选择文件后更新gedit()框中的值。下面的代码可能会更清楚:

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

到目前为止,我已尝试使用addhandlermousemotion,如上面的代码所示,因此gedit()框中的文本仅在您将鼠标移到框本身时才会更新。但是,如果框中的文字立即更新,我会更喜欢它。

我也尝试使用addhandleridle(),间隔为1秒,以便框中的文字每1秒自动更新一次。这很有效。但是,它使得无法正确输入框,因为文本框在保存正在键入的新“文件路径”之前使用旧的“sfilepath”进行更新。

我是GUI的初学者(我已经编写了一个工作程序,但是一旦我离开就需要其他人使用,所以上周五决定我应该弄清楚如何将它变成GUI) 。因此,非常感谢任何人提供的任何帮助。

1 个答案:

答案 0 :(得分: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)