Cómo hacer que el widget Tkinter Text sea sólo de lectura
-
Ponga el estado
Textendisablepara que TkinterTextsea sólo de lectura -
Ate cualquier tecla que pulse a la función
breakpara hacer que Tkinter seaTextde sólo lectura
Introduciremos métodos para hacer que el widget Tkinter Text sea de sólo lectura,
- Poner el estado
Textendisable. - 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