2009-09-06 19 views
9
from Tkinter import * 

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

Chcę móc sprawdzić, czy obecnie jest wybrane lub skupione text_field, dzięki czemu wiem, czy zrobić coś ze swoją zawartością, gdy użytkownik naciśnie przycisk Enter.Jak sprawdzić, czy widget jest aktywny w Tkinter?

Odpowiedz

16

Jeśli chcesz coś zrobić, gdy użytkownik naciśnie klawisz Enter, tylko jeśli fokus jest na widżecie wpisu, po prostu dodaj powiązanie do widgetu wpisu. Uruchomi się tylko wtedy, gdy ten widget ma fokus. Na przykład:

>>> from Tkinter import * 
>>> root=Tk() 
>>> e1=Entry(root) 
>>> e1.pack() 
>>> e2=Entry(root) 
>>> e2.pack() 
>>> def handleReturn(event): 
...  print "return: event.widget is",event.widget 
...  print "focus is:", root.focus_get() 
... 
>>> e1.bind("<Return>", handleReturn) 

Zauważ, że program obsługi jest wywoływana tylko jeśli pierwszy wpis ma ostrości po naciśnięciu powrót.

Jeśli naprawdę chcesz globalnego powiązania i chcesz wiedzieć, który widget jest aktywny, użyj metody focus_get() na obiekcie głównym. W poniższym przykładzie wiązanie jest umieszczane na "." (Główny toplevel) tak, że odpala bez względu na to, co ma skupić:

>>> from Tkinter import * 
>>> root=Tk() 
>>> e1=Entry(root) 
>>> e1.pack() 
>>> e2=Entry(root) 
>>> e2.pack() 
>>> def handleReturn(event): 
...  print "return: event.widget is",event.widget 
...  print "focus is:",root.focus_get() 
... 
>>> root.bind("<Return>",handleReturn) 

zauważyć różnicę między nimi: w pierwszym przykładzie obsługi zostanie wywołana tylko po naciśnięciu przycisku powrotu w pierwszym widget wejścia. Nie ma potrzeby sprawdzania, który widget jest aktywny. W drugim przykładzie program obsługi zostanie wywołany bez względu na to, który widget ma fokus.

Oba rozwiązania są dobre w zależności od tego, co naprawdę powinno się wydarzyć. Jeśli Twoim głównym celem jest tylko zrobienie czegoś, gdy użytkownik naciśnie przycisk powrotu w konkretnym widżecie, użyj tego pierwszego. Jeśli chcesz globalnego powiązania, ale w tym wiążące zrobić coś innego na podstawie tego, co ma lub nie ma ostrości, wykonaj ten drugi przykład.

+0

Czy jest to możliwe, ale bez czekania, należy nacisnąć. Na przykład, gdy użytkownik po prostu wybiera pozycję, aby coś wpisać, czy możliwe jest, że coś takiego się stało? –

+1

@ MuhamedHuseinbašić: tak, jest to możliwe. –

+0

Jak to zrobić? : D Gdzie mogę to znaleźć? –

Powiązane problemy