2024-04-18 23:20:23 发布
网友
from Tkinter import * app = Tk() text_field = Entry(app) text_field.pack() app.mainloop()
我希望能够检查text_field当前是否被选中或聚焦,以便知道当用户按enter时是否对其内容执行操作。
text_field
如果您想在用户仅在焦点位于entry小部件时按enter时执行某些操作,只需向entry小部件添加一个绑定。它只有在小部件有焦点时才会启动。例如:
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)
注意,只有在按return时第一个条目有焦点时才会调用处理程序。
如果您确实需要全局绑定,并且需要知道哪个小部件具有焦点,请对根对象使用focus_get()方法。在下面的示例中,绑定被放在“.”(主顶级)上,以便无论焦点是什么都触发它:
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)
注意两者之间的区别:在第一个示例中,只有在第一个entry小部件中按return时才会调用处理程序。不需要检查哪个小部件有焦点。在第二个示例中,无论哪个小部件具有焦点,都将调用处理程序。
这两种解决方案都很好,这取决于你真正需要发生的事情。如果您的主要目标是仅在用户在特定小部件中按return时执行某些操作,请使用前者。如果您想要一个全局绑定,但在该绑定中,根据具有或不具有焦点的内容执行不同的操作,请执行后一个示例。
如果您想在用户仅在焦点位于entry小部件时按enter时执行某些操作,只需向entry小部件添加一个绑定。它只有在小部件有焦点时才会启动。例如:
注意,只有在按return时第一个条目有焦点时才会调用处理程序。
如果您确实需要全局绑定,并且需要知道哪个小部件具有焦点,请对根对象使用focus_get()方法。在下面的示例中,绑定被放在“.”(主顶级)上,以便无论焦点是什么都触发它:
注意两者之间的区别:在第一个示例中,只有在第一个entry小部件中按return时才会调用处理程序。不需要检查哪个小部件有焦点。在第二个示例中,无论哪个小部件具有焦点,都将调用处理程序。
这两种解决方案都很好,这取决于你真正需要发生的事情。如果您的主要目标是仅在用户在特定小部件中按return时执行某些操作,请使用前者。如果您想要一个全局绑定,但在该绑定中,根据具有或不具有焦点的内容执行不同的操作,请执行后一个示例。
相关问题 更多 >
编程相关推荐