前田です。 In message "[ruby-list:5877] Ruby/Gtk module" Yukihiro Matsumoto <matz / netlab.co.jp> wrote: |先日来ごちゃごちゃやってたRuby/Gtkですが,いちおうある程度動 |くようですから,公開します. ようやく試してみました。 Gtkってウィジェットが豊富ですね:-) ちょっと気になったのですが、ウィジェットクラスはnewが オーバーライドされているので、 class MsgButton < Gtk::Button def initialize(label, msg) super(label) @msg = msg ... end end みたいなことをしようとするとうまく行かず、 class MsgButton < Gtk::Button def MsgButton.new(label, msg) obj = super(label) obj.initialize(msg) return obj end def initialize(msg) @msg = msg ... end end などとする必要がありますね。 newではなくinitializeをオーバーライドするように するというのはどうでしょう。 void set_gobject(obj, gtkobj) VALUE obj; GtkObject *gtkobj; { VALUE data; gtk_object_ref(gtkobj); data = Data_Wrap_Struct(cData, 0, gobj_free, gtkobj); gtk_object_set_user_data(gtkobj, (gpointer)obj); rb_ivar_set(obj, id_gtkdata, data); } static VALUE label_initialize(self, label) VALUE self, label; { set_gobject(self, gtk_label_new(get_cstring(label))); return Qnil; } のような感じです。 # あとget_cstringはNUM2INTみたいに標準で用意されていると # うれしいです。 -- 前田 修吾