2016-04-25 92 views
0

我想开发一个小部件,我可以在对话框中输入一个数字,然后将该数字保存到我的工作空间中以供日后使用,但是我是新的到R,并且在输入到小部件后无法检索文本输入。我发现了一些关于如何将信息从一个小部件传递到另一个小部件但不回到工作区的线程。我得到它的唯一方法是将代码运行到第二行,然后单独手动运行最后一行。任何人都可以帮我吗?你如何在R中输出gedit输入到Rstudio工作区

# clearing workspace 
rm(list = ls()) 

# Loading packages 
library(gWidgets) 
library(gWidgetstcltk) 

# Setting up Widget 
win=gwindow(title='Experiment setup',visible = TRUE) 
grp_name <- ggroup(container = win) 
okbut<-ggroup(container = win) 
lbl_data_frame_name <- glabel(
    'Choose number of indexing variables: ', 
    container = grp_name 
) 
#Asking user for input 
obj<-gedit(container=grp_name,handler=function(h,..){ 
    print(as.integer(svalue(h$obj))) 
    }, action = dispose(win)) 
#Attempt to return text from user input to workspace 
textfromgedit=svalue(obj) 
+0

我怀疑你可能需要将这个脚本保存为一个文件,例如'script.R',然后用'source(“script.R”)'调用该文件。这有诀窍吗? – CephBirk

+0

我认为你正在寻找'ginput'。 'gedit'和'dispose(win)'操作的使用是不正确的。如果您想在处理程序期间清除窗口,请将其添加到处理程序并将该值保存在处理程序中。为此,您需要分配到不同的环境。这个任务通常用'<< - '完成。 – jverzani

+0

谢谢你们,我都试过。在另一个脚本中使用不会将输入文本作为变量输出到工作区,ginput可以工作,但是我无法将ginput窗口嵌入到原始容器中。我想这样做,因为这最终将成为一个容器中输入窗口的子集。我认为通过设置ginput中的“parent”或“widget”选项作为它将嵌入输入的容器(在本例中为grp_name),但它没有。有任何想法吗?谢谢你的帮助。它非常感谢! –

回答

0

是否有这样的帮助?

library(gWidgets2) results <- new.env() win <- gwindow("Save number") gp <- gformlayout(container=win) gedit("", container=gp, label="Number of variables", coerce.with=as.numeric, handler=function(h,...) { results$values <- svalue(h$obj) })

没有一些技巧,分配在处理程序将在一个范围内,是不是到程序的其余部分可见分配。在上面的环境中用于分配。此任务也可以使用<<-赋值运算符。我也使用gformlayout更好地组织你的小部件。它可与gWidgets2,我建议使用,而不是更旧的gWidgets