Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@Dr_Thomas

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

More than 1 year has passed since last update.

この記事では、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()
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?