我正在编写一个小型数据库界面,并希望使用glayout。 MWE:
require(gWidgets)
options("guiToolkit"="RGtk2")
### The bowl
win <- gwindow( "Fruits")
gui <- glayout( container = win )
### Fruit salad
gui[1,1] <- glabel( "Apple", cont = gui )
gui[1,2] <- gbutton( "Change", cont = gui )
nav1 <- function( gui )
{
svalue( gui[1,1] ) <- "Banana"
}
addHandlerClicked( gui[1,2], handler = function( h, ... )
{
nav1( gui )
})
功能似乎存在,但我收到错误(或者是警告?)消息
(R:14953): Gtk-CRITICAL **: IA__gtk_table_attach: assertion `child->parent == NULL' failed
我用rseek(没有)和谷歌寻找解决方案(没有任何我能解决的具体问题)。任何想法我可以做什么来摆脱消息?或者我可以放心地忽略它们吗?
sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-pc-linux-gnu (64-bit)
...
other attached packages:
[1] gWidgetsRGtk2_0.0-81
答案 0 :(得分:5)
就在这一行:
svalue( gui[1,1] ) <- "Banana"
你得到错误。如果你将其分解为两个步骤:
tmp <- gui[1,1]
svalue( tmp ) <- "Banana"
它消失了。这必须与R如何使用替换函数创建副本有关,但gui [1,1]引用的小部件是一个指针。无论如何,不太确定。
答案 1 :(得分:1)
基于John的解决方案(非常感谢......),我进行了一些实验,发现创建包含索引小部件的列表可以解决问题。它还避免了当有许多小部件时可能令人讨厌的临时分配。
### The bowl
win <- gwindow( "Fruits")
gui <- glayout( container = win )
### Fruit salad
tmp <- list(
t1 = gui[1,1] <- glabel( "Apple", cont = gui ),
t2 = gui[1,2] <- gbutton( "Change", cont = gui ) )
nav1 <- function( tmp )
{
svalue( tmp$t1 ) <- "Banana"
}
addHandlerClicked( tmp$t2, handler = function( h, ... )
{
nav1( tmp )
})