Cómo hacer que el widget Tkinter Text sea sólo de lectura

Jinku Hu 30 enero 2023
  1. Ponga el estado Text en disable para que Tkinter Text sea sólo de lectura
  2. Ate cualquier tecla que pulse a la función break para hacer que Tkinter sea Text de sólo lectura
Cómo hacer que el widget Tkinter Text sea sólo de lectura

Introduciremos métodos para hacer que el widget Tkinter Text sea de sólo lectura,

  1. Poner el estado Text en disable.
  2. 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.

Advertencia
Necesita cambiar el estado de 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()
Atención

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()
Autor: 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 Facebook

Artículo relacionado - Tkinter Text