incrTclは有名な拡張で、継承や非公開メソッドとか、クラス変数、クラスメソッド、とかも使えるようで、C++的な書きかたでOOできるようになります。
package require Itcl namespace import itcl::* class Man { variable _name "" constructor {name} { set _name $name } method greet {} { puts "Hello, My name is $_name" } } Man he "Joe" he greet find objects -class Man delete object he
package require Tk package require Itcl namespace import itcl::* wm withdraw . class Win { variable name constructor {args} { set name .[string trimleft $this {::}] toplevel $name button $name.pr -text proc -command [code procPuts] button $name.mt -text method -command [code $this methodPuts] pack $name.pr $name.mt -side left } destructor { destroy $name } #クラスメソッド private proc procPuts {} { puts aaa } #メソッド private method methodPuts {} { puts bbb } }
tclsh から起動して、sourceして、
Win winA
とかするとwinAのウィンドウがでるので、ボタンを押してみてください。 codeというのは、コマンドの名前空間をキャプチャーするitclのコマンドです。変数の名前空間をキャプチャするときはscopeというコマンドがあります。