HOWTO · Tkinter

Tkinter Text ウィジェットを読み取り専用にする方法

このチュートリアルでは、Tkinter Text ウィジェットを読み取り専用にする方法を示します。

このページの内容

Tkinter Text ウィジェットを読み取り専用にする方法を紹介します。

  1. Text 状態を disable に設定します
  2. break 機能に任意のキーをバインドします

Text の state を disable に設定すると、Tkinter Text を読み取り専用にする

Text ウィジェットは、読み取り専用の状態になるように設定された後になると disable。

Text ウィジェットは、その状態 state を disable に設定した後、ウィジェットが読み取り専用になります。

import tkinter as tk

root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.configure(state="disabled")
readOnlyText.pack()

root.mainloop()

Text ウィジェットのデフォルトの状態は NORMAL です。これは、ユーザーがその中のテキストコンテンツを編集、追加、挿入、または編集できることを意味します。

readOnlyText.configure(state="disabled")

Text ウィジェットの状態を DISABLED 読み取り専用に変更する必要があります。そのウィジェット内のテキストを変更しようとしても、黙って無視されます。

注意
Text ウィジェットのコンテンツを更新する場合は、状態を disabled から normal に変更する必要があります。そうしないと、Text はずっと読み取り専用です。

任意のキーを break 関数にバインドして、Tkinter Text を読み取り専用にする

我々は唯一返すことを関数に任意のキーストロークをバインドする場合 break に Text ウィジェット、我々はそれを同じ結果を得ることができ Text、読み取り専用になります。

任意のキーを break の関数だけを Text ウィジェットをバインドすると、Text が読み取り専用になるのと同じ結果が得られます。

import tkinter as tk

root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda a: "break")
readOnlyText.pack()

root.mainloop()
注意
このソリューションと上記のソリューションの違いは、ここで CTRL+C は機能しないことです。つまり、コンテンツを編集したりコピーしたりすることはできません。

動作するために CTRL+C が必要な場合、Text 関数の例外として CTRL+C をバインドする必要があります。

import tkinter as tk


def ctrlEvent(event):
    if 12 == event.state and event.keysym == "c":
        return
    else:
        return "break"


root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda e: ctrlEvent(e))
readOnlyText.pack()

root.mainloop()