即使在TKinter(python)中按下Enter键,也如何生成制表键?

问题描述 投票:0回答:2

我试图找出如何在tkinter / python中生成TAB键事件。

我在tkinter中有一个键绑定,可用于返回键。

am_field_txt.bind('<Return>', next_focus)

而不是调用函数(next_focus),我只想生成一个TAB事件,以便可以使用按下Tab键时发生的'focusout'来运行正在使用的条目的现有验证。 (我已经设置了带有验证的文本输入,以便在validate = focusout上进行检查并处理所有内容;但是我希望它处理用户可以按return而不是'focusout'条件的一种情况(制表符或在文本框中单击))。我真的不想使用validate = key,因为这样,只要按下一个键,该例程便会运行(加上它已经设置好并可以进行对焦)。

是否有一种简单的方法可以为条目绑定返回键,从而发生TAB事件?

我在网上找到了有关TCL的文档,内容如下:

bind .w <Return> {focus [tk_focusNext %W]}
bind .w <Return> {event generate %W <Tab>}

最后一行是我想做的-除了Python和tkinter的格式/语法。我已经使用了tk_focusNext函数,但是对于tkinter / python来说,它又使用了不同的语法,因此我认为从第二行开始,这意味着必须有一种方法,只要按下RETURN键即可生成TAB键。(顺便说一句,tk_focusNext也不真正起作用,似乎选择了与Tab键不同的焦点……但这是一个不同的主题)。

python validation events tkinter bind
2个回答
1
投票

可以说,最简单的方法是通过向tk请求绑定到tab键的函数并将其分配给enter键,从而完全绑定基础tk小部件的功能,如下所示:

am_field_txt.bind('<Return>', root.bind_all("<Tab>"))

这将使Enter键的行为与Tab键的行为完全相同,包括设置焦点和选择小部件中的文本。

如果您不想选择下一个小部件中的文本,则可以创建next_focus函数,使其看起来像这样:

def next_focus(event):
    event.widget.tk_focusNext().focus_set()

0
投票

您可以将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>'))
© www.soinside.com 2019 - 2024. All rights reserved.