Для полноты: ozjimbob уже дал ответ за самый «чистый» способ, как это сделать.
Ответ ffeschet не работал со мной ни в Unix, ни в Windows.
Следовательно, в основном скрипте «запуска» вы должны как минимум иметь следующие записи:
options("guiToolkit"="RGtk2")
library(RGtk2)
library(gWidgets)
library(gWidgetsRGtk2)
StartMyGUI()
gtkMain()
В "дочернем" процессе "StartMyGUI ()" ваш код может, например, выглядеть так:
StartMyGUI <- function(handler=function(h,...) {
dispose(h$obj)
}) {
window <- gwindow("Hello")
group <- ggroup(container = window)
glabel("Hello World!", container=group, expand=TRUE)
# A group to organize the buttons
button.group <- ggroup(container = group)
# Push buttons to right
addSpring(button.group)
gbutton("OK", handler=handler, container=button.group)
gbutton("Cancel", handler = function(h,...) {
dispose(window)
gtkMainQuit()
},
container=button.group)
return()
}
Только когда пользователь нажимает кнопку «Отмена», вызывается gtkMainQuit (), которая выходит из материнского процесса в основном «запускающем» скрипте.