« Return to Thread: [ruby-dev:38323] [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合

[ruby-dev:38331] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合

by Hidetoshi NAGAI :: Rate this Message:

Reply to Author | View in Thread

永井@知能.九工大です.

From: oshida@...
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@...>
> 「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@...)
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

 « Return to Thread: [ruby-dev:38323] [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合