4

我正在编写一个小型数据库界面并想使用 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 
4

2 回答 2

5

它在这一行:

svalue( gui[1,1] ) <- "Banana"

你得到错误。如果你把它分成两个步骤:

tmp <- gui[1,1]
svalue( tmp ) <- "Banana" 

它消失了。这一定与 R 如何使用替换函数创建副本有关,但 gui[1,1] 引用的小部件是一个指针。无论如何,对此不太确定。

于 2013-01-26T20:57:44.140 回答
1

基于约翰的解决方案(非常感谢......),我做了一些实验,发现创建一个包含索引小部件的列表可以解决这个问题。它还避免了当有许多小部件时可能令人讨厌的临时分配。

###   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 )
})
于 2013-01-27T05:37:07.713 回答