Posted to tcl by teo at Wed Jul 23 14:12:32 GMT 2014view pretty

package require Itcl

itcl::class bar {
    public {
	method config_textvar {w var} {
	    $w configure -textvariable [itcl::scope $var]
	    set $var [clock seconds]
	}
    }
    private {
	variable foo 0
	variable bar 0
    }    
}

itcl::class foo {
    constructor args {
	create
    }

    public {
	method create {} {
	    set obj_ [uplevel \#0 bar \#auto]
	    pack [frame .f] -fill both -expand yes
	    pack [button .f.a] [button .f.b] [button .f.c] [button .f.d] -fill both -expand yes
	    switch -- $count_ {
		0 {
		    $obj_ config_textvar .f.a foo
		    .f.b configure -textvariable [itcl::scope count_]
		}
		1 {
		    $obj_ config_textvar .f.b foo
		    .f.c configure -textvariable [itcl::scope count_]
		}
		2 {
		    $obj_ config_textvar .f.c foo
		    .f.a configure -textvariable [itcl::scope count_]
		}
	    }
	    after $interval_ms_ [itcl::code $this assign]
	}
	method assign {} {
	    incr count_
	    if {$count_ > 2} { set count_ 0 }
	    set foo_ $count_
	    after $interval_ms_ [itcl::code $this remove]
	}
	method remove {} {
	    rename $obj_ {}
	    destroy .f
	    unset foo_
	    after $interval_ms_ [itcl::code $this create]
	}
    }
    private {
	variable interval_ms_ 100
	variable count_ 0
	variable foo_ 0
	variable obj_ {}
    }
}

wm geometry . 200x200
update idle
foo .foo