@implementation ScrollableBox { - init {} { $super init $super hideBorder $frame configure -relief sunken -bd 1 set canvas [canvas $frame.canvas -width 1 -height 1 -relief flat -bd 1] set xscroll [scrollbar $frame.xscroll -orient horizontal \ -command "$frame.canvas xview"] set yscroll [scrollbar $frame.yscroll -orient vertical \ -command "$frame.canvas yview"] $frame.canvas configure -xscrollcommand "$xscroll set" \ -yscrollcommand "$yscroll set" grid rowconfigure $frame 0 -weight 1 grid columnconfigure $frame 0 -weight 1 grid $frame.canvas $yscroll -sticky snew -padx 0 -pady 0 grid $xscroll -sticky snew -padx 0 -pady 0 set i [$frame.canvas create window 0 0 \ -window [frame $frame.canvas.frame] \ -anchor nw] bind $frame.canvas <Configure> { %W configure -scrollregion [list 0 0 \ [winfo reqwidth %W.frame] [winfo reqheight %W.frame]] } bind $frame.canvas.frame <Configure> { [winfo parent %W] configure -scrollregion [list 0 0 \ [winfo reqwidth %W] [winfo reqheight %W]] } eval bind $frame.canvas [@removeBindingsOnDestroyEvent] set innerFrame $frame.canvas.frame } - frame {} { return $innerFrame } }