Como fazer com que o widget Tkinter Text seja apenas de leitura

  1. Defina o Text como disabled para que o Text do Tkinter seja apenas de leitura
  2. Ligue qualquer tecla à função break para que o Tkinter Text só possa ser lido

Vamos introduzir métodos para tornar o widget Tkinter Text apenas para leitura,

  1. Defina o estado Text para ser disabled.
  2. Ligue qualquer tecla à função break.

Defina o Text como disabled para que o Text do Tkinter seja apenas de leitura

O widget Text torna-se apenas de leitura após o seu estado ser definido para ser disabled.

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

root.mainloop()

O estado padrão de um widget Text é NORMAL, o que significa que o usuário pode editar, anexar, inserir ou editar conteúdo de texto nele.

readOnlyText.configure(state='disabled')

Você precisa mudar o estado do widget Text para DISABLED para torná-lo somente leitura. Qualquer tentativa de alterar o texto dentro desse widget será silenciosamente ignorada.

Atenção

Você precisa mudar o estado de disabled para normal se você pretende atualizar o conteúdo do widget text, caso contrário, ele continua somente leitura.

Ligue qualquer tecla à função break para que o Tkinter Text só possa ser lido

Se ligarmos qualquer traço de chave à função que só retorna break ao widget Text, podemos obter o mesmo resultado em que o Text se torna apenas leitura.

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()
Atenção

A diferença entre esta solução e a solução acima é que o CTRL+C não funciona aqui. Isso significa que você não poderia editar o conteúdo nem copiá-lo.

Nós precisamos fazer a exceção do CTRL+C para a função vinculada ao Text se o CTRL+C for desejado.

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()

Artigo relacionado - Tkinter Text

  • Como obter a entrada da caixa de texto Tkinter
  • Artigo relacionado - Tkinter

  • Como definir o texto do Widget de texto Tkinter com um botão
  • Como excluir o conteúdo da caixa de texto Tkinter