Python: ¿Cómo obtener un texto de entrada actualizado para utilizar en un comando binded a ella?

StackOverflow https://stackoverflow.com/questions/4287553

  •  28-09-2019
  •  | 
  •  

Pregunta

Considere el siguiente código:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

Vamos a decir que puso las letras ABC en la entrada, una por una. La salida sería:

>>> 
>>> A
>>> AB

Tenga en cuenta que al pulsar A, se imprime una cadena vacía. Cuando presiono B, imprime A, AB no. Si no lo hago nada después pulse C, nunca se mostrará. Parece que el contenido de entrada sólo se actualiza después de que ha vuelto el comando encuadernados, así que no puedo utilizar el valor de la entrada real en esa función.

¿Hay alguna manera de obtener un valor de entrada actualizado para utilizar dentro de un comando Binded?

¿Fue útil?

Solución

Se podría reemplazar el evento <Key> con el evento <KeyRelease>. Eso debería funcionar.

A continuación se muestra una lista de eventos: http: / /infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types

Otros consejos

La razón de esto tiene que ver con Tk "bindtags". Los enlaces se asocian con las etiquetas, y las ataduras se procesan en orden etiqueta. Ambos nombres widget y clases de widgets son etiquetas, y se procesan en ese orden (fijaciones de widgets específicos primeros, encuadernaciones segunda clase).

Por esa razón, cada vez que pulse una tecla específica de su widget de unión se disparará antes de la clase de unión tiene la oportunidad de modificar el widget.

Hay muchas soluciones. La más sencilla es que se unen a <KeyRelease> desde los enlaces de clase ocurren en la pulsación de tecla. Hay otras soluciones que implican ya sea agregando o cambiando las etiquetas se unen, o utilizando el incorporado en funciones de validación de los datos del widget de entrada. ¿Qué es mejor depende de lo que realmente está tratando de lograr.

Para obtener más información sobre las funciones de validación de datos, consulte la siguiente pregunta: interactiva validación contenido de control de entrada de tkinter

Para obtener una respuesta más completa, ver Tkinter: Conjunto VarCadena después evento, incluyendo la tecla pulsada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top