From: Kazumi Okamoto Date: 1999-07-01T23:08:55+09:00 Subject: [ruby-list:15180] Re: Gtk::Menu の使い方に関する質問 こんにちは、岡本といいます。 Ruby/Gtk はちょくちょくさわっているのですが、 なかなか思うように作れないです。 いまは、右クリックを取得する方法になやんでいます。 なんだかんだいって、結構難しいですよね。 At Thu, 1 Jul 1999 16:09:04 +0900, Miyaki Masahiro wrote: > > はじめまして、宮木と申します。ruby-gtkのメニューオブジェクト > の使い方についてどなたかお教えください。 > > Gtk::OptionMenuにGtk::MenuItemをいくつか持ったたGtk::Menuを > 乗せておいて、特定のボタンが押されたら現在選ばれているメニュ > ーのラベルを取ろうとしたのですが、うまくいきません。多分私の > 使い方の問題なのですが、色々試して解決できずにいます。 Ruby/Gtk の Gtk browser をみるとわかるように、現在 MenuItem のテキストを取得する方法は提供されていないようです。 # Gtk::Widget の getname は、class 名でした。 ということで、MenuItem がどのインスタンスが選択されたかをしるためには、 menuitem を変数としてもっておく方法があると思います。 menuitem1 = Gtk::MenuItem::new('Item1') menu.append menuitem1 menuitem1.show menuitem2 = Gtk::MenuItem::new('Item2') menu.append menuitem2 menuitem2.show menuitem3 = Gtk::MenuItem::new('Item3') menu.append menuitem3 menuitem3.show 中略 bt.signal_connect('clicked'){ s = menu.get_active if s == menuitem1 then puts "Item1" end # puts menu.get_active.child.get_text } こんなんでどうでしょうか? これなら Menu のラベルがとれたほうが簡単に記述できる気がしますね。 > > 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を取 > る事ができます。 > > menu.signal_connect('button_press_event'){ > puts menu.get_active.child.get_text > } すいません、この child メソッドを利用する方法はわかりません。 以上です。 -- Kazumi Okamoto