Help us understand the problem. What is going on with this article?

tkinterのTextウィジェットを使っているときCtrl+Shift+Zでredoが効かないのを直す

この記事では、Windows10の環境で、Python 3.7.4を使っています。

tkinterのTextウィジェットでundoやredoを効かせる

 Textウィジェットでのundoやredoのやり方ではまったので書かせてもらいたいと思う。

tkinterのTextウィジェットを表示させる

 以下のコードでTextウィジェットを表示できる

text.py
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()

 実行すると以下のようになる。
text_widet.png

Textウィジェットでundo redoをさせる

 undo redoをさせるにはそんなに難しくない。4行目の

text.py
text = tk.Text()

 を

text.py
text = tk.Text(undo=True)

 と()にundo=Trueを入れるだけで良い。

 これで、Ctrl+Zでundoができるようになる。のだが、なぜだかCtrl+Shift+Zでredoが効かない。これでは困ったことになるので、何とかしないといけない。

Textウィジェットでredoをさせる

 方法として、bindを使う。
 これは、あるイベントに対して、特定の処理を行うための方法である。
 今回は、Ctrl+Shift+Zというイベントにredoを行う処理を与えることにする。これで上手くいくはずである。

 まず、2行目にredoを行う処理を追加する。

text.py
def redo(event=None):
    text.edit_redo()

 そして、6行目にbind設定を記入する。

text.py
text.bind('<Control-Shift-Key-Z>', redo)

 このとき注意しないと行けないのはZは大文字にならないと行けない。(Shiftを押しているので大文字になるとのこと。)
 これを実行するとちゃんとCtrl+Shift+Zでredoが効くようになる。

今回のすべてのソース

text.py
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()
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away