from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查当前是否选择text_field
,还是关注,以便在用户按Enter键时我知道是否对其内容执行某些操作。
答案 0 :(得分:18)
如果您想在用户仅在焦点位于条目小部件时按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)
请注意,只有在按下return时第一个条目具有焦点时才会调用该处理程序。
如果您确实需要全局绑定并且需要知道哪个窗口小部件具有焦点,请在根对象上使用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)
注意两者之间的区别:在第一个示例中,只有在第一个条目小部件中按return时才会调用处理程序。无需检查哪个小部件具有焦点。在第二个示例中,无论哪个窗口小部件具有焦点,都将调用处理程序。
两种解决方案都很好,取决于您真正需要发生的事情。如果您的主要目标是仅在用户按下特定小部件中的返回时执行某些操作,请使用前者。如果你想要一个全局绑定,但是在那个绑定中根据有或没有焦点的东西做一些不同的事情,做后一个例子。