From: Hidetoshi NAGAI Date: 2009-04-26T09:34:29+09:00 Subject: [ruby-dev:38331] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 永井@知能.九工大です. From: oshida@bb-next.net Subject: [ruby-dev:38323] [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 Date: Fri, 24 Apr 2009 21:28:42 +0900 Message-ID: <1240576111.49f1b06fabf64@u1.div.rasch.jp> > 「sample/tkcombobox.rb が動かなくなっています」 > という表現の方がシンプルで良いかも知れません。 > > もし、tk/ttk_selector.rb の > "Ttk is a standard library on Tcl/Tk8.5+" > が 8.4 サポートの terminate を意味しないのであれば、 > autoload 登録を見合せていただければありがたいです。 8.4 と 8.5 との間で互換性のあるスクリプトを 書きやすいようにと考えていたのですが, 「小さな親切,大きなお世話」になってしまったようですね. ごめんなさい. ですが,将来の機能強化の際にも同様の問題が出てしまうであろうことや default_widget_set の切替え機能のことを考えると, 登録を削ってしまうのも少々辛いです. > また、ひとまず手元では、 > > Object.const_set(:TkCombobox, Class.new(XXX)) > class TkCombobox < XXX > > とすることで autoload を無効化しています。 衝突するクラス (この場合は TkCombobox クラス) を定義する前に ------------------------------------------------------------------------------ Object.instance_eval{remove_const :TkCombobox} if Object.autoload? :TkCombobox ------------------------------------------------------------------------------ として autoload を無効化してください. # sample/tkcombobox.rb には,これを追加しておくようにします. また,default_widget_set 切替えとの整合も取らせたいのであれば, ------------------------------------------------------------------------------ class MyTkCombobox < TkEntry; ... ; end Tk.__set_toplevel_aliases__(:Tk, MyTkCombobox, :TkCombobox, TkComboBox) ------------------------------------------------------------------------------ などとして登録を行ってください. この例では MyTkCombobox というクラスを default_widget_set が Tk の時に TkCombobox および TkComboBox の名前で使えるようにしています. -- 永井 秀利 (nagai@ai.kyutech.ac.jp) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門