The script
# create text
text .t -width 20 -height 20 -wrap none
pack .t -fill both -expand 1
# randomly fill text
set count [expr {int(rand() * 50)}]
for {set i 0} {$i < $count} {incr i} \
{
set line [string repeat 0 [expr {int(rand()*50)}]]
.t insert {end - 1 char} $line\n
}
# move the display to nw
.t xview moveto 0.0
.t yview moveto 0.0
update
# get visible area size in fractions of 1.0
set fx [lindex [.t xview] 1]
set fy [lindex [.t yview] 1]
# get visible area size in chars
set cw [.t cget -width]
set ch [.t cget -height]
# compute full size
set width [expr {round($cw / $fx) + 2}]
set height [expr {round($ch / $fy)}]
# resize the widget
.t config -width $width -height $heightCategory GUI | Category Example

