1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python tkinter で undo/redo をやりたいメモ

Posted at

背景

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 大文字が必要でした.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?