2019年9月14日
この記事では、Windows10の環境で、Python 3.7.4を使っています。
Textウィジェットでのundoやredoのやり方ではまったので書かせてもらいたいと思う。
以下のコードでTextウィジェットを表示できる
import tkinter as tk
root = tk.Tk()
text = tk.Text()
text.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
root.mainloop()
実行すると以下のようになる。
undo redoをさせるにはそんなに難しくない。4行目の
text = tk.Text()
を
text = tk.Text(undo=True)
と()にundo=Trueを入れるだけで良い。
これで、Ctrl+Zでundoができるようになる。のだが、なぜだかCtrl+Shift+Zでredoが効かない。これでは困ったことになるので、何とかしないといけない。
方法として、bindを使う。
これは、あるイベントに対して、特定の処理を行うための方法である。
今回は、Ctrl+Shift+Zというイベントにredoを行う処理を与えることにする。これで上手くいくはずである。
まず、2行目にredoを行う処理を追加する。
def redo(event=None):
text.edit_redo()
そして、6行目にbind設定を記入する。
text.bind('<Control-Shift-Key-Z>', redo)
このとき注意しないと行けないのはZは大文字にならないと行けない。(Shiftを押しているので大文字になるとのこと。)
これを実行するとちゃんとCtrl+Shift+Zでredoが効くようになる。
import tkinter as tk
def redo(event=None):
text.edit_redo()
root = tk.Tk()
text = tk.Text(undo=True)
text.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
text.bind('<Control-Shift-Key-Z>', redo)
root.mainloop()