gWidgets:如何在应用程序中保存用户的工作?
gWidgets: How to save user's work in the application?
我一直在使用 gWidgets 在 R 中构建应用程序。
应用程序包括几个可编辑的表格、工作表等 - 基本上类似于 MS Excell,但用于特殊目的。
当用户保存完成的工作并退出应用程序时,he/she 应该能够从 he/she 结束的地方继续工作 - 比如单击图标或导入 "working document"进入应用程序 - 这样所有的工作表和数据都将被打开(再次像 MS Excell 等)并且与关闭应用程序时相同。
但是,我不知道该怎么做。有人可以帮忙吗?
像这样的一些模式应该有效:
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]]
}
}
})
我一直在使用 gWidgets 在 R 中构建应用程序。 应用程序包括几个可编辑的表格、工作表等 - 基本上类似于 MS Excell,但用于特殊目的。
当用户保存完成的工作并退出应用程序时,he/she 应该能够从 he/she 结束的地方继续工作 - 比如单击图标或导入 "working document"进入应用程序 - 这样所有的工作表和数据都将被打开(再次像 MS Excell 等)并且与关闭应用程序时相同。
但是,我不知道该怎么做。有人可以帮忙吗?
像这样的一些模式应该有效:
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]]
}
}
})