r - 如何在 R 中使用 gWidgetsRGtk2 使用 gfile 指定文件路径后立即更新 gedit 框

标签 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”之前,文本框已使用旧“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/

相关文章:

r - ggplot : how to assign both color and shape for one factor, 以及另一个因素的形状?

java - JButton 不产生输出 - 石头剪刀布游戏(GUI,Java)

r - 使用 gWidgets2 显示图形

R- spplot 不在 gWidgets GUI 中绘制栅格堆栈

r - 如何刷新 R gWidget 的内容?

r - 读取 keras 数据集中内置的错误 - 类型错误 : 'int' object is not callable

r - 查看 R 中数据框的所有名称

r - 用第一个值总结

HTML/CSS 布局 - 动态宽度

java - Clojure:类 CSS/DOM 的 Java UI