Python 将焦点从一个文本小部件更改为另一个文本小部件

Python 将焦点从一个文本小部件更改为另一个文本小部件,python,tkinter,Python,Tkinter,我是Python新手,我正在尝试使用Tkinter创建一个简单的GUI 在许多用户界面中,点击tab按钮通常会将焦点从一个文本小部件切换到另一个文本小部件。每当我在文本小部件中时,tab只缩进文本光标 有人知道这是否是可配置的吗 焦点遍历在某种程度上是可自定义的,通常由X windows管理器处理(焦点跟随鼠标或单击)。根据需要,对于制表符按下,应该可以将事件转换为按键事件,并在这些情况下触发事件。使用Tkinter很容易做到这一点 要想让这一切顺利进行,必须要做几件事。首先,您需要确保标准行为

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

在许多用户界面中,点击tab按钮通常会将焦点从一个文本小部件切换到另一个文本小部件。每当我在文本小部件中时,tab只缩进文本光标


有人知道这是否是可配置的吗

焦点遍历在某种程度上是可自定义的,通常由X windows管理器处理(焦点跟随鼠标或单击)。根据需要,对于制表符按下,应该可以将事件转换为按键事件,并在这些情况下触发事件。

使用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)
def focus_next_窗口(事件):
event.widget.tk_focusNext().focus()
返回(“中断”)
text_widget=text(…)
text\u widget.bind(“,焦点\u下一个\u窗口)
有关此代码的要点:

  • 方法
    tk_focusNext()
    返回键盘遍历层次结构中的下一个小部件
  • 方法
    focus()
    将焦点设置为该小部件
  • 返回
    “break”
    非常关键,因为它可以防止类绑定触发。正是这个类绑定插入了您不想要的制表符
如果希望应用程序中的所有文本小部件都具有此行为,可以使用
bind\u class()
方法而不是
bind()
使此绑定影响所有文本小部件


您也可以将绑定发送焦点发送到一个非常特定的小部件,但我建议您坚持默认的遍历顺序,然后确保遍历顺序正确。

在PyQt4中非常简单,只需使用下面这一行,您就可以通过按tab按钮更改焦点:


self.textEdit.setTabChangesFocus(True)

我不明白;我建议他在接受的答案中写些什么,不是吗?你的答案太弱了,没有用处。我不认为焦点遍历是可定制的“由于跨平台性质”。跨平台与此无关。此外,你的回答是“这应该是可能的”。如果我在寻求帮助,而有人说“这应该是可能的”,我不觉得这很让人放心。要么是,要么不是。最后,“扫描制表符”毫无意义——没有办法“[扫描]制表符”,你也不会说怎么做。听起来你的答案是猜测,这让它没那么有用。我有一个几乎无关的问题,关于如何在不实际阻止执行其默认行为的情况下,为响应a而执行一些额外的步骤。这个回答完全掩盖了这一点。谢谢PyQt4解决方案对于使用Tkinter的人来说是无用的。