Follwing ticket copied from tcllib tracker:

As stated in the title, the ScrollableFrame changes width upon unmap and map events.

See:


I have found the bug and solved it. Here are the original and modified
procedures:

<verbatim>
proc ScrollableFrame::_frameConfigure {canvas {unmap 0}} {
    # This ensures that we don't get funny scrollability in the frame
    # when it is smaller than the canvas space
    # use [winfo] to get height & width of frame

    # [winfo] doesn't work for unmapped frame
    set frameh [expr {$unmap ? 0 : [winfo height $canvas.frame]}]
    set framew [expr {$unmap ? 0 : [winfo width $canvas.frame]}]

    set height [_max $frameh [winfo height $canvas]]
    set width [_max $framew [winfo width $canvas]]

    $canvas:cmd configure -scrollregion [list 0 0 $width $height]
}
</verbatim>

This is the modified above procedure.
<verbatim>
proc ScrollableFrame::_frameConfigure {canvas {unmap 0}} {
    # This ensures that we don't get funny scrollability in the frame
    # when it is smaller than the canvas space
    # use [winfo] to get height & width of frame

    # [winfo] doesn't work for unmapped frame
    if {$unmap} {  return  }

    set frameh [winfo height $canvas.frame]
    set framew [winfo width $canvas.frame]

    set height [_max $frameh [winfo height $canvas]]
    set width [_max $framew [winfo width $canvas]]

    $canvas:cmd configure -scrollregion [list 0 0 $width $height]
}
</verbatim>