Even More
Text widgets can do many more things. Here, we'll briefly mention just a few more of them. For details on any of these, see the reference manual.
Search
The text widget includes a powerful search
method to locate a piece of text
within the widget. This is useful for a "Find" dialog, as one obvious example.
You can search backward or forward from a particular position or within a given
range, specify the search term using exact text, case insensitive, or via
regular expressions, find one or all occurrences of the search term, etc.
Modifications, Undo and Redo
The text widget keeps track of whether changes have been made (useful to know
whether it needs to be saved to a file, for example). We can query (or change)
using the set_edit_modified( modified )
method. There is also a complete
multi-level undo/redo mechanism, managed automatically by the widget when we set
its undo
configuration option to true
. Calling edit_undo
or edit_redo
modifies the current text using information stored on the undo/redo stack.
Eliding Text
Text widgets can include text that is not displayed. This is known as "elided"
text, and is made available using the elide
configuration option for tags. It
can be used to implement an outliner, a "folding" code editor, or even to bury
extra meta-data intermixed with displayed text. When specifying positions within
elided text, you have to be a bit more careful. Methods that work with positions
have extra options to either include or ignore the elided text.
Introspection
Like most Tk widgets, the text widget goes out of its way to expose information
about its internal state. We've seen this in terms of the get
method, widget
configuration options, names
and cget
for both tags and marks, etc. There is
even more information available that can be useful for a wide variety of tasks.
Check out the debug
, dlineinfo
, bbox
, count
, and dump
methods in the
reference manual.
Peering
The Tk text widget allows the same underlying text data structure (containing
all the text, marks, tags, images, etc.) to be shared between two or more
different text widgets. This is known as peering and is controlled via
peer_create
and peer_names
methods.