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

Jinku Hu 2023年1月3日 2019年12月24日 Tkinter Tkinter Text
  1. Textstatedisable に設定すると、Tkinter Text を読み取り専用にする
  2. 任意のキーを break 関数にバインドして、Tkinter Text を読み取り専用にする
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()
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

関連記事 - Tkinter Text

  • Tkinter テキストボックスから入力を取得する方法
  • Tkinter テキストボックスの内容を削除する方法
  • Tkinter テキストウィジェットのフォントを設定する方法
  • ボタンを使用して Tkinter テキストウィジェットのテキストを設定する方法