2011-03-16 34 views
9

Im trabajando en una GUI para algunos programas de chat. Para la entrada del usuario tengo widget de Texto(), los mensajes se envían a través de "Volver" y después de eso limpio el Texto(). Pero tan duro como lo intenté, no puedo eliminar el último "\ n" que crea el botón Volver.¿Cómo borrar todo desde el widget de texto tkinter?

Aquí está mi código para esta parte:

def Send(Event): 
    MSG_to_send=Tex2.get("1.0",END) 
    client.send(MSG_to_send) 
    Tex2.delete("1.0",END) 

ganas de ofertas)

Respuesta

7

Es muy probable que su problema sea que su enlace está sucediendo antes de se inserta la línea nueva. Borras todo, pero luego se inserta la nueva línea. Esto se debe a la naturaleza de cómo funciona el widget de texto: los enlaces de widgets suceden antes de los enlaces de clase, y los enlaces de clase son donde la entrada de usuario se inserta realmente en el widget.

La solución es probable que ajustar sus fijaciones a suceder después los enlaces de clase (por ejemplo, mediante la unión a <KeyRelease> o ajustar los bindtags). Sin embargo, sin ver cómo estás haciendo la encuadernación, es imposible para mí decir con certeza que este es tu problema.

Otro problema es que cuando obtiene el texto (con Tex2.get("1.0",END)), posiblemente obtenga más texto del esperado. El widget de texto tkinter garantiza que siempre hay una nueva línea después del último carácter en el widget. Para obtener exactamente lo que el usuario ingresó sin esta nueva línea, use Tex2.get("1.0","end-1c"). Opcionalmente, es posible que desee quitar todos los espacios en blanco finales de lo que está en el widget de texto antes de enviarlo al cliente.

+0

Su consejo sobre el evento fue tan vital como confuso fue el consejo sobre las marcas. Ahora todo funciona bien, muchas gracias. – Andrey

0

Con una cadena puede eliminar el último carácter con:

msg = msg[:-2] 

También podría eliminar todo espacios en blanco desde el final de la cadena (incluidas las líneas nuevas) con:

msg = msg.rstrip() 

OK. Después de leer su comentario, creo que se debe revisar esta página: The Tkinter Text Widget

donde se explica:.

"Si inserta o elimina texto antes de una marca, la marca se mueve junto con el otro texto para eliminar una marca, debe utilizar el método* mark_unset *. Eliminar texto en una marca no elimina la marca en sí. "

---- ---- EDITAR

Mi error, hay que saltarse el párrafo anterior. Las marcas no tienen nada que ver con la nueva línea. Como explica Bryan en su respuesta: El widget de texto tkinter garantiza que siempre hay una nueva línea después del último carácter en el widget.

+0

Sí, pero el problema no estaba relacionado con el mensaje que le envié al cliente; después de Tex2.delete() obtengo el campo vacío Tex2 con un cursor insertado en "2.0", pero lo que necesito es vacío Tex2 con el cursor en "1.0" – Andrey

+0

Gracias por su tiempo) – Andrey

+0

Esto no soluciona el problema de eliminar la nueva línea adicional en el widget de texto ... –

Cuestiones relacionadas