Виджет Text имеет встроенный механизм, позволяющий реализовать операции отмены/возврата, которые могут отменить или восстановить изменения текста внутри виджета.
Вот как работает стек отмены/возврата:
Каждое изменение содержимого фиксируется путем добавления в стек записей, описывающих это изменение, будь то вставка или удаление. Эти записи записывают как старое состояние содержимого, так и новое: при удалении записывается удаленный текст, при вставке - вставленный текст, а также описание места и того, было ли это вставкой или удалением.
Ваша программа может также поместить в стек специальную запись, называемую разделителем.
Операция undo изменяет содержимое виджета на то, каким оно было в какой-то предыдущий момент. Для этого нужно отменить все изменения, помещенные в стек отмены/возврата, пока не будет достигнут разделитель или пока не закончится стек.
Однако обратите внимание, что Tkinter также запоминает, какая часть стека была отменена в операции отмены, пока какая-либо другая операция редактирования не изменит содержимое виджета.
Операция redo работает только в том случае, если с момента последней операции отмены/возврата не было произведено ни одной операции редактирования. Она повторно применяет все отмененные операции.
Методы, используемые для реализации стека отмены/возврата, см. в методах .edit_redo, .edit_reset, .edit_separator и .edit_undo в Раздел 24.8, "Методы для виджетов Text". Механизм отмены не включен по умолчанию; вы должны установить опцию undo в виджете.