TkinterのTextウィジェットで元に戻す(Undo)・やり直し(Redo)機能を有効にする方法
TkinterのTextウィジェットは、Entryウィジェットと同様の入力ウィジェットですが、テキストフィールド内で複数行のユーザー入力を受け付けられる点が大きな特徴です。フォントや色、余白など、ウィジェットの既定のプロパティを構成するための組み込み機能やメソッドが数多く用意されています。
Textウィジェットに「元に戻す(Undo)」や「やり直し(Redo)」の機能を追加するには、Boolean型の属性 undo を使用します。この属性を True に設定すると、編集履歴が内部的に記録され、一度消去したり変更したりしたテキストを再び取り出せるようになります。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk
# tkinterフレームまたはウィンドウのインスタンスを作成
win = Tk()
# ウィンドウサイズを設定
win.geometry("700x350")
# undoを有効にしたTextウィジェットを作成
text = Text(win, width=60, height=20, undo=True)
text.pack()
text.insert(END, "Enter anything Here...")
win.mainloop()
実行結果
上記のコードを実行すると、Undo/Redo機能が有効になったテキストウィジェットが表示されます。

動作を確認するには、Textウィジェットに任意の文字列を入力し、Ctrl+Z キーで元に戻す、Ctrl+Y キーでやり直しを行います。
補足:プログラムからUndo/Redoを制御する
undo=True を有効にすると、キーボードショートカットだけでなく、text.edit_undo() および text.edit_redo() メソッドを呼び出すことで、メニューバーやボタンからも元に戻す・やり直し操作を実行できます。また、既定で有効になっている autoseparators=True の設定により、挿入や削除といった個々の編集操作が自動的に履歴として区切って記録されます。
-
Tkinterでテキストウィジェットにスクロールバーを追加する方法
Tkinterのテキストウィジェット(Text Widget)は、複数行にわたるユーザー入力を受け付けるためのウィジェットです。エントリーウィジェット(Entry Widget)とよく似ていますが、最大の違いはテキストウィジェットが複数行のテキスト入力をサポートしている点にあります。テキストウィジェットを作成するには、まずテキストオブジェクトをインスタンス化します。 複数行のテキストを扱う場合、内容がウィジェットの表示領域を超えることがあるため、スクロールバーの追加が不可欠です。テキストウィジェットにスクロールバーを追加するには、ScrolledText(root) 関数を使用します。この関数
-
Tkinterでウィジェットを表示・非表示に切り替える方法
GUIアプリケーションを開発していると、状況に応じてウィジェットを表示したり非表示にしたりしたい場面が出てきます。Tkinterでは、この操作を非常に簡単に実装できます。ウィジェットを非表示にするには、pack_forget() メソッドを使用します。非表示にしたウィジェットを再び表示するには、pack() メソッドを使用します。どちらのメソッドも、lambda式(無名関数)を使ってボタンのcommand引数に渡すことで、手軽に呼び出すことができます。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 w