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

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

我希望能夠檢查當前是否選擇或關注text_field,以便我知道在用戶按下Enter時是否對其內容執行某些操作。如何檢查小工具是否集中在Tkinter中?

回答

16

如果您只想在焦點位於條目窗口小部件上時按下Enter鍵,您只需添加一個綁定至條目窗口小部件即可。它只會在該小部件具有焦點時觸發。例如:

>>> 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) 

請注意,只有當您按回車時第一個條目具有焦點時纔會調用處理函數。

如果您確實需要全局綁定並需要知道哪個窗口小部件具有焦點,請在根對象上使用focus_get()方法。在下面的例子中,綁定放在「。」上。 (主頂層),以便它觸發無論什麼具有焦點:

>>> 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) 

注意兩者之間的區別:在第一個例子中的處理器將只當你按下的第一項控件返回調用。沒有必要檢查哪個小部件具有焦點。在第二個例子中,無論哪個小部件具有焦點,處理程序都將被調用。

這兩種解決方案都很好,取決於您真正需要發生的事情。如果您的主要目標是隻在用戶按下特定窗口小部件中的返回時才執行某些操作,請使用前者。如果你想要一個全局綁定,但是在該綁定中根據有或沒有焦點做了不同的事情,請執行後面的示例。

+0

這是可能的事情,但沒有等待輸入被按下。例如,當用戶只需選擇輸入鍵入某些內容時,是否有可能知道發生了這種情況? – 2015-01-04 20:51:16

+1

@MuhamedHuseinbašić:是的,這是可能的。 – 2015-01-04 22:57:09

+0

如何做到這一點? :D我在哪裏可以找到? – 2015-01-05 16:01:08

相關問題