即使在 TKinter (python) 中按下回车键,如何生成制表键?
How to generate tab key even when enter key pressed in TKinter (python)?
我正在尝试了解如何在 tkinter/python 中生成 TAB 键事件。
我在 tkinter 中有一个键绑定,适用于 return 键。
am_field_txt.bind('<Return>', next_focus)
我不想调用函数 (next_focus),而只是想生成一个 TAB 事件,这样对正在使用的条目的现有验证将能够 运行 使用 'focusout' 当按下 Tab 键时发生。 (我已经设置了带有验证的文本条目,以便在 validate=focusout 上它会检查并处理所有事情;但我希望它能够处理用户可以按 return 而不是 'focusout' 条件(制表符或单击文本框外))。
我真的不想使用 validate=key 因为那个例程是 运行 任何时候按下一个键(加上它已经设置并为 focusout 工作)。
是否有一种简单的方法来绑定条目的 return 键,以便发生 TAB 事件?
我在网上找到了 TCL 的文档,内容如下:
bind .w <Return> {focus [tk_focusNext %W]}
bind .w <Return> {event generate %W <Tab>}
最后一行是我想做的 - 除了 Python 和 tkinter 的 format/syntax。
我使用了 tk_focusNext 函数,但它又是 tkinter/python 的不同语法,所以我认为从第二行开始,它一定意味着有一种方法可以在 RETURN 时生成 TAB 键键被按下。
(另一方面,tk_focusNext 也不能正常工作,似乎选择了与 tab 键不同的焦点……但这是一个不同的话题)。
您可以使用 TCL 代码作为 Python 绑定中的参数
import tkinter as tk
root = tk.Tk()
e1 = tk.Entry(root)
e1.pack()
e2 = tk.Entry(root)
e2.pack()
#bind .w <Return> {event generate %W <Tab>}
e1.bind('<Return>', 'event generate %W <Tab>')
e2.bind('<Return>', 'event generate %W <Tab>')
root.mainloop()
还有event_generate()
e2.bind('<Return>', lambda x:root.event_generate('<Tab>'))
可以说,最简单的方法是准确绑定底层 tk 小部件的功能,方法是向 tk 询问绑定到 tab 键的功能并将其分配给 enter 键,如下所示:
am_field_txt.bind('<Return>', root.bind_all("<Tab>"))
这将使回车键的行为与 Tab 键完全一样,包括设置焦点和选择小部件中的文本。
如果您不希望下一个小部件中的文本被选中,您可以创建如下所示的 next_focus
函数:
def next_focus(event):
event.widget.tk_focusNext().focus_set()
我正在尝试了解如何在 tkinter/python 中生成 TAB 键事件。
我在 tkinter 中有一个键绑定,适用于 return 键。
am_field_txt.bind('<Return>', next_focus)
我不想调用函数 (next_focus),而只是想生成一个 TAB 事件,这样对正在使用的条目的现有验证将能够 运行 使用 'focusout' 当按下 Tab 键时发生。 (我已经设置了带有验证的文本条目,以便在 validate=focusout 上它会检查并处理所有事情;但我希望它能够处理用户可以按 return 而不是 'focusout' 条件(制表符或单击文本框外))。 我真的不想使用 validate=key 因为那个例程是 运行 任何时候按下一个键(加上它已经设置并为 focusout 工作)。
是否有一种简单的方法来绑定条目的 return 键,以便发生 TAB 事件?
我在网上找到了 TCL 的文档,内容如下:
bind .w <Return> {focus [tk_focusNext %W]}
bind .w <Return> {event generate %W <Tab>}
最后一行是我想做的 - 除了 Python 和 tkinter 的 format/syntax。 我使用了 tk_focusNext 函数,但它又是 tkinter/python 的不同语法,所以我认为从第二行开始,它一定意味着有一种方法可以在 RETURN 时生成 TAB 键键被按下。 (另一方面,tk_focusNext 也不能正常工作,似乎选择了与 tab 键不同的焦点……但这是一个不同的话题)。
您可以使用 TCL 代码作为 Python 绑定中的参数
import tkinter as tk
root = tk.Tk()
e1 = tk.Entry(root)
e1.pack()
e2 = tk.Entry(root)
e2.pack()
#bind .w <Return> {event generate %W <Tab>}
e1.bind('<Return>', 'event generate %W <Tab>')
e2.bind('<Return>', 'event generate %W <Tab>')
root.mainloop()
还有event_generate()
e2.bind('<Return>', lambda x:root.event_generate('<Tab>'))
可以说,最简单的方法是准确绑定底层 tk 小部件的功能,方法是向 tk 询问绑定到 tab 键的功能并将其分配给 enter 键,如下所示:
am_field_txt.bind('<Return>', root.bind_all("<Tab>"))
这将使回车键的行为与 Tab 键完全一样,包括设置焦点和选择小部件中的文本。
如果您不希望下一个小部件中的文本被选中,您可以创建如下所示的 next_focus
函数:
def next_focus(event):
event.widget.tk_focusNext().focus_set()