Question

from Tkinter import *

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

Je veux être en mesure de vérifier si text_field est sélectionné ou concentré, pour que je sache si oui ou non faire quelque chose avec son contenu lorsque l'utilisateur presse entrent.

Était-ce utile?

La solution

Si vous voulez faire quelque chose lorsque l'utilisateur presse entrent uniquement si l'accent est mis sur le widget d'entrée, il suffit d'ajouter une liaison au widget entrée. Il ne se déclenche si ce widget a le focus. Par exemple:

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)

Notez que le gestionnaire est appelé uniquement si la première entrée est mise au point lorsque vous appuyez sur retour.

Si vous voulez vraiment une liaison globale et besoin de savoir widget qui a le focus, utilisez la méthode focus_get () sur l'objet racine. Dans l'exemple suivant une liaison est mis sur « » (La principale toplevel) pour qu'il se déclenche, peu importe ce qui a le focus:

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)

Remarquez la différence entre les deux: dans le premier exemple, le gestionnaire ne sera appelé lorsque vous appuyez sur retour dans le premier widget d'entrée. Il n'y a pas besoin de vérifier widget qui a le focus. Dans le deuxième exemple, le gestionnaire sera appelé peu importe widget qui a le focus.

Les deux solutions sont bonnes selon ce que vous avez vraiment besoin d'être arrivé. Si votre objectif principal est de ne faire quelque chose lorsque l'utilisateur appuie le retour dans un widget spécifique, utilisez l'ancien. Si vous voulez une liaison globale, mais que la liaison faire quelque chose différent en fonction de ce qui a ou n'a pas le focus, faire ce dernier exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top