Cómo hacer que el widget Tkinter Text sea sólo de lectura
-
Ponga el estado
Text
endisable
para que TkinterText
sea sólo de lectura -
Ate cualquier tecla que pulse a la función
break
para hacer que Tkinter seaText
de sólo lectura
Introduciremos métodos para hacer que el widget Tkinter Text sea de sólo lectura,
- Poner el estado
Text
endisable
. - Vincular cualquier pulsación de tecla a la función
break
.
Ponga el estado Text
en disable
para que Tkinter Text
sea sólo de lectura
El widget Text
se convierte en sólo lectura después de que su estado sea disable
.
import tkinter as tk
root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.configure(state="disabled")
readOnlyText.pack()
root.mainloop()
El estado por defecto de un widget de Texto
es NORMAL
, lo que significa que el usuario puede editar, añadir, insertar o editar el contenido del texto en él.
readOnlyText.configure(state="disabled")
Necesita cambiar el estado del widget Text
a DISABLED
para hacerlo de sólo lectura. Cualquier intento de cambiar el texto dentro de ese widget será ignorado silenciosamente.
desactivado
a normal
si pretende actualizar el contenido del widget Texto
, de lo contrario, se mantiene como sólo lectura.Ate cualquier tecla que pulse a la función break
para hacer que Tkinter sea Text
de sólo lectura
Si ligamos cualquier golpe de tecla a la función que sólo devuelve break
al widget Text
, podríamos obtener el mismo resultado que el Text
se convierte en sólo lectura.
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()
La diferencia entre esta solución y la anterior es que el CTRL+C no funciona aquí. Significa que no puedes ni editar el contenido ni copiarlo.
Necesitamos hacer la excepción de CTRL+C a la función que enlaza con el Text
si se desea 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()
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