前田です。

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みたいに標準で用意されていると
# うれしいです。

-- 
前田 修吾