Como fazer com que o widget Tkinter Text seja apenas de leitura
-
Defina o
Text
comodisabled
para que oText
do Tkinter seja apenas de leitura -
Ligue qualquer tecla à função
break
para que o TkinterText
só possa ser lido
Vamos introduzir métodos para tornar o widget Tkinter Text apenas para leitura,
- Defina o estado
Text
para serdisabled
. - 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.
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()
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()
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 Facebook