我正在尝试使用 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”之前,文本框已使用旧“sfilepath”进行更新。
我是GUI制作的初学者(我已经写了一个工作程序,但是一旦我离开它需要被其他人使用,所以上周五决定我应该弄清楚如何将它制作成GUI) 。因此,任何人都可以提供的任何帮助将不胜感激。
最佳答案
这是您想要的模式(将处理程序传递给 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)
关于r - 如何在 R 中使用 gWidgetsRGtk2 使用 gfile 指定文件路径后立即更新 gedit 框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741307/