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(何もない)とGoogle(私の特定の問題に関連するものは何もない)で解決策を探しました。メッセージを取り除くために私ができることはありますか?または、それらを安全に無視できますか?

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"

エラーが発生すること。これを2つのステップに分割すると、次のようになります。

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

それは消えます。これは、Rが置換関数を使用してコピーを作成する方法と関係があるはずですが、gui[1,1]によって参照されるウィジェットはポインターです。とにかく、それについてはよくわかりません。

于 2013-01-26T20:57:44.140 に答える
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 )
})
于 2013-01-27T05:37:07.713 に答える