Validation
The -validate, -validatecommand, and -invalidcommand options are used to enable entry widget validation.
Validation Modes
There are two main validation modes: prevalidation, in which the -validatecommand is evaluated prior to each edit and the return value is used to determine whether to accept or reject the change; and revalidation, in which the -validatecommand is evaluated to determine whether the current value is valid.
- none
- Default. This means validation will only occur when specifically requested by the validate widget command.
- key
- The entry will be prevalidated prior to each edit (specifically, whenever the insert or delete widget commands are called). If prevalidation fails, the edit is rejected.
- focus
- The entry is revalidated when the entry receives or loses focus.
- focusin
- The entry is revalidated when the entry receives focus.
- focusout
- The entry is revalidated when the entry loses focus.
- all
- Validation is performed for all above conditions.
The -invalidcommand is evaluated whenever the -validatecommand returns a false value.
The -validatecommand and -invalidcommand may modify the entry widget’s value via the widget insert or delete commands, or by setting the linked -textvariable. If either does so during prevalidation, then the edit is rejected regardless of the value returned by the -validatecommand.
If -validatecommand is empty (the default), validation always succeeds.
Validation Script Substitutions
- %d
- Type of action: 1 for insert prevalidation, 0 for delete prevalidation, or -1 for revalidation.
- %i
- Index of character string to be inserted/deleted, if any, otherwise -1.
- %P
- In prevalidation, the new value of the entry if the edit is accepted. In revalidation, the current value of the entry.
- %s
- The current value of entry prior to editing.
- %S
- The text string being inserted/deleted, if any, {} otherwise.
- %v
- The current value of the -validate option.
- %V
- The validation condition that triggered the callback (key, focusin, focusout, or forced).
- %W
- The name of the entry widget.
Differences from Tk Entry Widget Validation
The standard Tk entry widget automatically disables validation (by setting -validate to none) if the -validatecommand or -invalidcommand modifies the entry’s value. The Tk themed entry widget only disables validation if one of the validation scripts raises an error, or if -validatecommand does not return a valid boolean value. (Thus, it is not necessary to re-enable validation after modifying the entry value in a validation script).
In addition, the standard entry widget invokes validation whenever the linked -textvariable is modified; the Tk themed entry widget does not.