From: Kazunori Akaishi Date: 1999-07-02T00:11:56+09:00 Subject: [ruby-list:15184] Re: Gtk::Menu の使い方に関する質問 akaishi といいます。 From: Miyaki Masahiro Subject: [ruby-list:15177] Gtk::Menu の使い方に関する質問 Date: Thu, 1 Jul 1999 16:09:04 +0900 > MenuItemはBinの派生クラスなのでchildを使ってLabelを取れるだ > ろうと思ったのですが、添付のプログラムで"TEST"ボタンを押すと > > >>Gtk-WARNING **: invalid cast from (NULL) pointer to `GtkObject' > >>./test.rb:30:in `child': not a Gtk object (TypeError) > > のようなエラーとなってしまいます。ですが、Gtk::Menuに対して > 下記のsignalを設定すると、メニューを変更する直前のLabelを取 > る事ができます。 Gtk+ の実装を追ったわけではないので以下の話は半分推測ですが、 メニューを開いているときは、各メニューアイテムが見えており、その child であるラベルも取得することができます。 しかしTEST ボタンを押すとき、目に見えているのはメニューではなくてオプショ ンメニュー(のみ)です。そしてどうやらラベルはメニューアイテムではなく(一 時的に)オプションメニューに親がすげかえられている(?)ようです。 よって、 > bt.signal_connect('clicked'){ > puts menu.get_active > puts menu.get_active.child.get_text > } ではなくて、 bt.signal_connect('clicked'){ puts opt.children[0].get } で望みの動作をすると思います。オプションメニューは Gtk::Container から派 生しており、children は Gtk::Container のメソッドです。 あと関係ないですが、vbox = Gtk::VBox.new の部分は引数がないとエラーにな ります。 さらに関係ないですが、menuitem = Gtk::MenuItem.new text の部分は ruby 1.2 系ではエラーになりますね。