Tkinter Text widget reading input (how to do overwrite mode?)

Jeff Epler jepler at unpythonic.net
Mon Apr 29 11:00:39 EDT 2002


I have implemented an 'overwrite mode' in the Text widget in tcl.
Conversion to Python is left as an exercise to the reader.
Make your Text widget an OverwriteText by calling 'MakeOverwriteText'
on it, which inserts OverwriteText in the list of bindtags.
Tested (minimally) on tk8.4 CVS, not on earlier versions.

proc TextOverwrite {w s} {
    set len [string length $s]
    $w delete insert insert+${len}c
}

# The overwrite flag is stored as a tag, if it's present
# overwrite mode is active
proc TextIsOverwrite {w} {
    expr {[lsearch [$w tag names] overwrite_flag] != -1}
}

proc TextSetOverwrite {w} {
    $w tag add overwrite_flag 0.0 end
}

proc TextSetInsert {w} {
    $w tag delete overwrite_flag
}

proc TextToggleOverwrite {w} {
    if {[TextIsOverwrite $w]} {
	TextSetInsert $w
    } else {
	TextSetOverwrite $w
    }
}

bind OverwriteText <KeyPress> {
    if {[TextIsOverwrite %W]} { TextOverwrite %W %A }
    # fall through to Text's <KeyPress> binding
}
bind OverwriteText <Insert> {
    TextToggleOverwrite %W
    break; # apparently <Insert> pastes selection, don't fall through
}

proc MakeOverwriteText { w } {
    set bt [bindtags $w]
    set t [lsearch $w Text]
    bindtags $w [linsert $bt $t OverwriteText]
}

#text .t
#pack .t
#MakeOverwriteText .t





More information about the Python-list mailing list