@implementation Box { - init {} { $super init set border [frame $path.border -relief groove -bd 2] set frame [frame $path.border.inner] set label [label $path.label] set font [$label cget -font] if {[set index [lsearch -exact $font bold]] != -1} { $label configure -font [lreplace $font $index $index] } set padxy [expr [winfo reqheight $label]/2] pack $border $frame -fill both -expand 1 \ -padx $padxy -pady $padxy } - label: aLabel { $label configure -text $aLabel if [string length $aLabel] { $self showLabel } else { $self hideLabel } } - label {} { return [$label cget -text] } - showLabel {} { $self showBorder place $label -x 20 -rely -0.0 } - hideLabel {} { place forget $label } - showBorder {} { set padxy [expr [winfo reqheight $label]/2] pack configure $frame -padx $padxy -pady $padxy pack configure $border -padx $padxy -pady $padxy $border configure -bd 2 -relief groove } - hideBorder {} { $self hideLabel $border configure -bd 0 -relief flat pack configure $frame -padx 1 -pady 1 pack configure $border -padx 1 -pady 1 } - frame {} { return $frame } - background: aColor { foreach w [list $path $border $frame $label] { $w configure -background $aColor } } - background {} { return [$path cget -background] } }