tkinter의 Text 위젯을 사용할 때 Ctrl + Shift + Z로 redo가 작동하지 않는 것을 고치십시오.

이 기사에서는 Windows 10 환경에서 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 위젯으로 undo redo



 undo redo를 시키기에는 그리 어렵지 않다. 네 번째 줄

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()

좋은 웹페이지 즐겨찾기