将焦点从一个Text小部件更改为另一个

LJM*_*LJM 11 python tkinter

我是Python的新手,我正在尝试使用Tkinter创建一个简单的GUI.

因此,在许多用户界面中,按Tab键按钮会将焦点从一个Text小部件更改为另一个.每当我在Text小部件中时,tab只会缩进文本光标.

有谁知道这是否可配置?

Bry*_*ley 19

这对Tkinter来说非常容易.

要做到这一点,必须要做几件事.首先,您需要确保不会发生标准行为.也就是说,您不希望tab同时插入选项卡并将焦点移动到下一个窗口小部件.默认情况下,事件在标准行为发生之前由特定小部件处理(通常在类绑定中).Tk有一个简单的内置机制来阻止事件进一步处理.

其次,您需要确保将焦点发送到适当的小部件.内置支持确定下一个小部件是什么.

例如:

def focus_next_window(event):
    event.widget.tk_focusNext().focus()
    return("break")

text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
Run Code Online (Sandbox Code Playgroud)

关于此代码的重点:

  • 该方法tk_focusNext()返回键盘遍历层次结构中的下一个窗口小部件.
  • 该方法focus()将焦点设置为该窗口小部件
  • 返回"break"是至关重要的,因为它阻止了类绑定的触发.正是这个类绑定插入了您不想要的制表符.

如果您希望应用程序中的所有文本窗口小部件都具有此行为,则可以使用该bind_class()方法而不是bind()使此绑定影响所有文本窗口小部件.

您还可以将绑定发送焦点放在非常特定的小部件上,但我建议坚持使用默认的遍历顺序,然后确保遍历顺序正确.

  • 我有一个几乎不相关的问题,关于如何在响应 &lt;Tab&gt; 时执行一些额外的步骤,**没有**实际阻止 &lt;Tab&gt; 执行其默认行为。这个答案完美地涵盖了它。谢谢! (2认同)