背景
tkinter で undo, redo やりたい.
Text widget だと undo=True でいけたりするが, たとえば Entry widget では対応していない.
また, カスタム widget 作った場合も同様で自前で undo/redo の仕組みを作る必要がある.
方法
ウィジェト全体にキーバインドをしかけて, 自前で undo/redo 処理が必要でした.
ctrl-z で undo したい場合, <Control-z> を bind に指定します.
undo/redo の情報の保存
幸い Python は値を保存するというのがやりやすいので, 適当に編集履歴の情報を stack(list) に追加したりしていけばいいでしょう.
(C++ とかだとめんどい. std::any や, JSON とかにメッセージをシリアライズとかしないといけない)
GUI 要素が動的に追加/削除されるのではなければ, event あたりにあるウィジェトの id(ハンドル?)あたりを保存でもいいかもしれません.
ctrl-shift-z で redo したい.
tkinterのTextウィジェットを使っているときCtrl+Shift+Zでredoが効かないのを直す
https://qiita.com/Dr_Thomas/items/c825e4bf21e150f6188c
ありがとうございます. shift キーを含める場合は, この場合は Key-Z と Z 大文字が必要でした.