Domanda

from Tkinter import *

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

Voglio essere in grado di verificare se text_field è selezionata o concentrata, in modo che io so se o non fare qualcosa con il suo contenuto quando l'utente preme Invio.

È stato utile?

Soluzione

Se si vuole fare qualcosa quando l'utente preme Invio solo se il focus è sul widget di ingresso, è sufficiente aggiungere un legame con il widget di ingresso. Esso si attiva solo se quel widget ha il focus. Ad esempio:

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)

Si noti che il gestore viene chiamato solo se la prima voce è fuoco quando si preme il ritorno.

Se si vuole veramente una vincolante globale e bisogno di sapere quali widget ha concentrarsi, utilizzare il metodo focus_get () sull'oggetto radice. Nel seguente esempio, un legame è messo in "" (Toplevel principale) in modo che gli incendi non importa ciò che è attivo:

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)

Si noti la differenza tra i due: nel primo esempio, sarà chiamato solo il gestore quando si preme il ritorno nel primo widget di ingresso. Non v'è alcuna necessità di controllare quale widget ha messa a fuoco. Nel secondo esempio, il gestore sarà chiamato non importa quale widget ha concentrarsi.

Entrambe le soluzioni sono buone a seconda di ciò che si ha realmente bisogno di avere successo. Se il vostro obiettivo principale è quello di fare qualcosa solo quando l'utente preme ritornano in un widget specifico, utilizzare l'ex. Se si desidera un vincolante globale, ma in quel legame fare qualcosa di diverso in base a ciò che ha o non ha messa a fuoco, fare il secondo esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top