Basic idea is to emulate text flow for text widget through multilayout widgets display and some kind of geometry management for text using tags. ====== package require Tk package require Img grid [frame .f] -column 0 -row 0 -sticky nswe grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1 grid columnconfigure .f 0 -weight 1; grid rowconfigure .f 0 -weight 1 set img [image create photo -data {iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAAAGUExURQAAAP///6XZn90AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAPSURBVBjTY/gP BAyDlwAA2ul/gcqaQMAAAAAASUVORK5CYII=}] grid [text .f.t -height 10 -width 20] -column 0 -row 0 -sticky nswe grid [button .f.b -image $img] -column 0 -row 0 -sticky nw set w [expr {[image width $img]+8}] set h [expr {[image height $img]+4}] .f.t tag configure tag1 -lmargin1 $w -lmargin2 $w .f.t insert end "qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890" update bind .f.t {+mod} bind .f.t {+mod} proc mod {} { .f.t tag add tag1 1.0 end .f.t mark set offset @[winfo width .f.t],$::h .f.t tag remove tag1 1.0 end .f.t tag add tag1 1.0 offset } mod ====== <>GUI