如果有办法嵌入gWidgets
来自其他包的对象。例如从包utils
中。
options(guiToolkit = "RGtk2")
library(RGtk2)
library(gWidgets)
library(gWidgetsRGtk2)
library(utils)
w <- gwindow() # gwindow {gWidgets}
e <- edit(InsectSprays) # edit.data.frame {utils}
这是不可能的,因为gWidgets
仅支持特定类的对象,例如gButton
等gWindow
。gWidgets
不包含用于导入\嵌入外部库\打包 GUI 对象的文档化函数。例如
options(guiToolkit = "RGtk2")
library(RGtk2)
library(gWidgets)
library(gWidgetsRGtk2)
library(utils)
win <- gwindow("Window example",
handler=function(h,...) {
print("See ya")
})
but <- gbutton("cancel", container=win,
handler = function(h,...) dispose(win))
str(but) # gButton class object structure
# Formal class 'gButton' [package "gWidgets"] with 2 slots
# ..@ toolkit:Formal class 'guiWidgetsToolkitRGtk2' [package "gWidgets"] with 1 slot
# .. .. ..@ toolkit: chr ...
# ..@ widget :Warning in str.default(obj, ...) :
# 'str.default': 'le' -- это NA, так что беру как 0
# Formal class 'gButtonRGtk' [package "gWidgetsRGtk2"] with 3 slots
# .. .. ..@ block :Classes 'GtkAlignment', 'GtkBin', 'GtkContainer', 'GtkWidget', 'GtkObject', 'GInitiallyUnowned', 'GObject', 'RGtkObject' <externalptr>
# .. .. .. ..- attr(*, "interfaces")= chr [1:2] ...
# .. .. ..@ widget :Classes 'GtkButton', 'GtkBin', 'GtkContainer', 'GtkWidget', 'GtkObject', 'GInitiallyUnowned', 'GObject', 'RGtkObject' <externalptr>
# .. .. .. ..- attr(*, "interfaces")= chr [1:3] ...
# .. .. ..@ toolkit:Formal class 'guiWidgetsToolkitRGtk2' [package "gWidgets"] with 1 slot
# .. .. .. .. ..@ toolkit: chr ...
此外,在执行代码后,代码会将控制权返回给 R 编程环境。
相反utils::edit
,函数返回data.frame
对象并暂停 R 执行环境。
根据评论 jverzani,gWidgets2
如果您想集成到其他 GUI 中,新版本的软件包允许访问底层小部件。使用gWidgets2
'sgetToolkitWidget
方法可以将底层 GUI 项目附加到布局中,该add
方法应该可以工作。