raw_input - Python: ¿Cómo obtener un texto de Entrada actualizado para usar en un comando ligado a él?
python input() (2)
Podría reemplazar el evento <Key>
con el evento <KeyRelease>
. Eso debería funcionar.
Aquí hay una lista de eventos: http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types
Considera el siguiente código:
text = Entry(); text.pack()
def show(e):
print text.get()
text.bind(''<Key>'', show)
Digamos que pongo las letras ABC en la Entrada, una por una. La salida sería:
>>>
>>> A
>>> AB
Tenga en cuenta que al presionar A, imprime una cadena vacía. Cuando presiono B, imprime A, no AB. Si no presiono nada después de C, nunca se mostrará. Parece que el contenido de la Entrada solo se actualiza después de que ha retornado el comando binded, por lo que no puedo usar el valor de la Entrada real en esa función.
¿Hay alguna manera de obtener un valor de entrada actualizado para usar dentro de un comando enlazado?
La razón de esto tiene que ver con Tk "bindtags". Los enlaces se asocian con etiquetas, y las vinculaciones se procesan en orden de etiqueta. Ambos nombres de widgets y clases de widgets son etiquetas, y se procesan en ese orden (primero, vinculaciones específicas de widgets, vinculaciones de clases en segundo lugar).
Por esa razón, cada vez que presione una tecla, se activará el enlace específico de su widget antes de que el enlace de clase tenga la posibilidad de modificar el widget.
Hay muchas soluciones. Lo más simple es vincularse a <KeyRelease>
ya que los enlaces de clase suceden al presionar la tecla. Existen otras soluciones que implican agregar o reorganizar las etiquetas de vinculación, o usar las características de validación de datos integradas del widget de entrada. Lo mejor depende de lo que realmente estás tratando de lograr.
Para obtener más información sobre las funciones de validación de datos, consulte esta pregunta: validación interactiva del contenido del widget de entrada en tkinter
Para obtener una respuesta más completa, consulte Tkinter: configure StringVar después del evento <Key>, incluida la tecla presionada