gWidgets: как встроить из других пакетов?

Если есть способ встроить в gWidgets объекты из других пакетов. Например из пакета utils.

options(guiToolkit = "RGtk2")
library(RGtk2)
library(gWidgets)
library(gWidgetsRGtk2)

library(utils)

w <- gwindow() # gwindow {gWidgets}
e <- edit(InsectSprays) # edit.data.frame {utils} 

person Apostolos Polymeros    schedule 23.01.2012    source источник
comment
edit.data.frame возвращает отредактированный фрейм данных. Я думаю, вы имеете в виду, можете ли вы встроить средство просмотра данных R в окно gWidget. В этом случае ответ, вероятно, нет.   -  person Richie Cotton    schedule 23.01.2012
comment
Ты прав. Ответ, вероятно, нет. Мой вопрос связан с идеей виджета для включения объектов из других пакетов. Во всяком случае, TNX   -  person Apostolos Polymeros    schedule 23.01.2012
comment
Нет никаких причин, по которым вы не можете смешивать и сочетать GUI gWidgets с вещами, созданными в другом месте: вы просто не можете иметь их в одном окне. Таким образом, у вас может быть кнопка gWidgets, при нажатии которой открывается окно средства просмотра данных R или что-то еще.   -  person Richie Cotton    schedule 23.01.2012


Ответы (1)


Это невозможно, так как 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 позволяет получить доступ к базовым виджетам, если вы хотите интегрироваться в другие графические интерфейсы. Используя метод getToolkitWidget gWidgets2, можно присоединить базовые элементы графического интерфейса к макету, метод add должен работать.

person Artem    schedule 19.12.2019
comment
Вы можете получить доступ к базовым виджетам, если хотите интегрироваться в другие графические интерфейсы. Использование gWidgets2 делает это проще, так как есть метод getToolkitWidget. Если вы хотите прикрепить базовые элементы графического интерфейса к макету, метод add должен работать. - person jverzani; 01.01.2020
comment
Спасибо, добавлю в тело ответа. - person Artem; 10.01.2020