Обновление при использовании этого метода для отмены / повторения:
Я создаю графический интерфейс с большим количеством кадров, и каждый из них содержит не менее десяти или более виджетов 'entry'.Я использовал класс History и создал один объект истории для каждого поля ввода, которое у меня было.Я был в состоянии сохранить все значения входных виджетов в списке, как здесь.Я использую метод «trace», прикрепленный к каждому виджету записи, который будет вызывать функцию «add» класса History и сохранять все изменения.Таким образом, я смог сделать это без отдельного запуска какого-либо потока.Но самым большим недостатком этого является то, что мы не можем делать несколько отмен / повторов с помощью этого метода.
Проблема: Когда я отслеживаю каждое изменение виджета ввода и добавляю его в список, он также 'отслеживает«изменение, которое происходит, когда мы« отменяем / возвращаем », что означает, что мы не можем сделать больше шага назад.как только вы сделаете отмену, это изменение, которое будет отслежено, и, следовательно, значение 'отменить' будет добавлено в список в конце.Следовательно, это не правильный метод.
Решение: Идеальный способ сделать это - создать два стека для каждого виджета ввода.Один для «Отменить» и один для «Повторить».Если когда-либо произойдет изменение записи, поместите это значение в стек отмены.Когда пользователь нажимает «Отменить», извлеките последнее сохраненное значение из стека отмены и, что важно, поместите его в «стек повторного выполнения».следовательно, когда пользователь нажимает redo, извлекает последнее значение из стека redo.