gWidgets:如何在应用程序中保存用户的工作?

时间:2018-07-02 12:53:51

标签: r gwidgets

我一直在使用gWidgets在R中构建应用程序。 该应用程序包括几个可编辑的表格,工作表等-基本上类似于MS Excell,但是出于特殊目的。

当用户保存已完成的工作并退出应用程序时,他/她应该能够从结束的地方继续工作-诸如单击图标或将“工作文档”导入应用程序-这样,工作表和数据将被打开(再次类似于MS Excell等),并且与关闭应用程序时的状态相同。

但是,我不知道该怎么做。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

类似这样的模式应该可以工作:

library(gWidgets2)

# Global variables
widgets <- list()
values <- NULL # or a list()
state <- NULL

## Layout GUI
w <- gwindow("Test")
g <- ggroup(cont=w)
g1 <- ggroup(horizontal=FALSE, cont=g)
save_btn <- gbutton("Save state", cont=g1)
restore_btn <- gbutton("restore state", cont=g1)

widgets$w1 = gedit("some text", cont=g)
nb = gnotebook(cont=g)
widgets$w2 = gradio(c("a","b","c"), label="radio", cont=nb)
widgets$w3 = gtable(mtcars[1:3,1:3], label="table", cont=nb)

# Save and restore actions
addHandlerClicked(save_btn, handler=function(...) {
    values <<- lapply(widgets, svalue, index=TRUE)
    state <<- lapply(widgets, "[")
})

addHandlerClicked(restore_btn, handler=function(...) {
    if (!is.null(values)) {
        for (nm in names(widgets)){
            ## screen for widgets without values
            if (length(state[[nm]]))
                widgets[[nm]] <- state[[nm]]
            print(list(widgets[[nm]], values[[nm]]))
            svalue(widgets[[nm]], index=TRUE) <- values[[nm]]
        }
    }
})