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

胡金庫 2023年1月30日
  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()
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Tkinter Text