宮木です。 随分勉強させて頂きました。 Kazunori Akaishi <akaishi / ruby.freak.ne.jp> wrote: >|akaishi です。 >| >|From: Hiroshi Igarashi <igarashi / ueda.info.waseda.ac.jp> >|Subject: [ruby-list:15195] Re: Gtk::Menu の使い方に関する質問 >|Date: Fri, 2 Jul 1999 13:42:20 +0900 >| >|> > しかしTEST ボタンを押すとき、目に見えているのはメニューではなくてオプショ >|> > ンメニュー(のみ)です。そしてどうやらラベルはメニューアイテムではなく(一 >|> > 時的に)オプションメニューに親がすげかえられている(?)ようです。 >|> >|> このへん、私も昨晩GTK+のソースを見て確認しました。 >|> 一瞬Ruby/GTKのバグかと思いましたが、そうではないようです。 >|> #GTK+にNULLが渡ってしまうのはやっぱりバグか。 >| >|MenuItem の child がとれないことの説明は上記で良いとして、 なるほど、MenuItemの子どもをOptionMenuが横取りして一つだけ 見えるようにするのがOptionMenuの役目っていう事なんですね。 なんか理解できる気がします。 ところで、少し話は逸れますが、MenuにRadioMenuItemをappend してもget_activeで得られるオブジェクトはMenuItemになります がこれはこういうものなんでしょうか。いえ、特にそれで困って いるわけではないですが。 >|> 宮木さんのスクリプトを上記のように書き換えた場合、 >|> opt.childrenは要素数1のArray [false]を返します。 >|> これは変ですね。Ruby/GTKのバグかもしれません。調べてみます。 >| >|自分のところでは動いているのになんでやー、と思って調べたところ、事前に >|MenuItem の child を参照しているかしていないかで挙動が異なるようです。 >|例えば、 >| >|['Item1','Item2','Item3'].each{|text| >| menuitem = Gtk::MenuItem.new(text) >| menuitem.child # この行を追加 >| menu.append menuitem >| menuitem.show >|} >| >|このようにしてやると、opt.children がちゃんと参照できます。 >|# Gtk+ の中で何らかの最適化機構が働いているのかも。 >| >|念のためこちらで動作確認したプログラムを添付します。 確かに動きますね。うーむ。 -- E-mail miyaki / wni.co.jp 宮木 昌広