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

  1. Textstatedisable に設定すると、Tkinter Text を読み取り専用にします
  2. 任意のキーを break 関数にバインドして、Tkinter Text を読み取り専用にします

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

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

Textstatedisable に設定すると、Tkinter Text を読み取り専用にします

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

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

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 を読み取り専用にします

我々は唯一返すことを関数に任意のキーストロークをバインドする場合 breakText ウィジェット、我々はそれを同じ結果を得ることができ 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()
comments powered by Disqus