Pregunta

from Tkinter import *

app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()

Quiero ser capaz de verificar si text_field se centra actualmente seleccionada o, para que yo sepa si debe o no hacer algo con su contenido cuando el usuario pulsa Intro.

¿Fue útil?

Solución

Si usted quiere hacer algo cuando el usuario pulsa Intro sólo si el foco está en el widget de entrada, sólo tiene que añadir una unión con el widget de entrada. Sólo se disparará si ese widget tiene el foco. Por ejemplo:

import tkinter as tk

root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()

def handleReturn(event):
    print("return: event.widget is",event.widget)
    print("focus is:", root.focus_get())

e1.bind("<Return>", handleReturn)

Tenga en cuenta que el controlador sólo se llama si la primera entrada tiene el foco cuando se pulsa retorno.

Si realmente quiere un método global vinculante y la necesidad de saber qué control tiene el foco, utilice el focus_get () en el objeto raíz. En el siguiente ejemplo de una unión que se ponga a "" (El nivel superior principal) forma que se dispare sin importar lo que tiene el foco:

import tkinter as tk

root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()

def handleReturn(event):
    print("return: event.widget is",event.widget)
    print("focus is:",root.focus_get())

root.bind("<Return>", handleReturn)

cuenta de la diferencia entre los dos: en el primer ejemplo, el controlador sólo se llama cuando se presiona el retorno en el primer widget de entrada. No hay necesidad de comprobar qué control tiene el foco. En el segundo ejemplo, el controlador se llamará sin importar el widget tiene el foco.

Las dos soluciones son buenos dependiendo de lo que realmente necesita haber sucedido. Si su objetivo principal es sólo para hacer algo cuando el usuario presiona regresan en un widget específico, utilice el primero. Si quieres un global vinculante, pero en la que la unión de hacer algo diferente basado en lo que tiene o no tiene el foco, hacer el último ejemplo.

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