2012-05-30 15 views

Respuesta

9

¿Ha intentado simplemente deshabilitar el widget de texto?

text_widget.configure(state="disabled") 

En algunas plataformas, también es necesario agregar un enlace en <1> para dar el foco al widget, de lo contrario no aparece el resaltado para copiar:

text_widget.bind("<1>", lambda event: text_widget.focus_set()) 

Si desactiva el widget , para insertar mediante programación sólo hay que

  1. cambiar el estado del widget para NORMAL
  2. I nsert el texto, y luego
  3. cambiar el estado de nuevo a DISABLED

Mientras no se llama a update en medio de ese entonces no hay manera para que el usuario pueda introducir nada de forma interactiva.

+0

Sí, lo tengo, pero de acuerdo con los documentos, eso permite la entrada de cualquier cosa, incluso desde funciones y cosas así. –

+0

@PsychicOak: por supuesto. Pero para insertar programáticamente, todo lo que necesita hacer es establecer el estado en "normal", insertar el texto y luego restablecer el estado en "deshabilitado". He actualizado mi respuesta para incluir esa información. –

+0

* suspiro * me siento estúpido ahora>.> Jaja ¡gracias! Obtendrás tus puntos cuando me permitan aceptar xD –

1

Lo siento, llegué tarde a la fiesta pero encontré esta página buscando la misma solución que usted.

Encontré que si "deshabilita" el widget de texto por defecto y luego lo "normal" al comienzo de una función que le da entrada y "lo desactiva" nuevamente al final de la función.

def __init__(): 
    self.output_box = Text(fourth_frame, width=160, height=25, background="black", foreground="white") 
    self.output_box.configure(state="disabled") 

def somefunction(): 
    self.output_box.configure(state="normal") 
    (some function goes here) 
    self.output_box.configure(state="disable") 
0

yo nos topamos con el estado estado de solución = "normal"/= "desactivado", así, sin embargo, entonces no puede seleccionar y copiar texto fuera de él. Finalmente encontré la solución a continuación de: Is there a way to make the Tkinter text widget read only?, y esta solución le permite seleccionar y copiar texto, así como seguir hipervínculos.

import Tkinter 

root = Tkinter.Tk() 
readonly = Tkinter.Text(root) 
readonly.bind("<Key>", lambda e: "break") 
Cuestiones relacionadas