15

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

通常在许多用户界面中,点击选项卡按钮会将焦点从一个文本小部件更改为另一个。每当我在 Text 小部件中时,tab 只会缩进文本光标。

有谁知道这是否可配置?

4

3 回答 3

28

使用 Tkinter 很容易做到这一点。

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

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

例如:

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

text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)

关于此代码的要点:

  • 该方法tk_focusNext()返回键盘遍历层次结构中的下一个小部件。
  • 该方法focus()将焦点设置到该小部件
  • return"break"很关键,因为它可以防止类绑定触发。正是此类绑定插入了您不想要的制表符。

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

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

于 2009-09-20T15:57:10.737 回答
-5

焦点遍历在某种程度上是可定制的,通常让 X 窗口管理器处理它(焦点跟随鼠标,或单击)。根据手册,应该可以bind对按键事件进行事件,对于标签按下,并focusNext在这些情况下触发事件。

于 2009-09-20T03:31:41.603 回答
-5

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

self.textEdit.setTabChangesFocus(True)

于 2017-01-18T18:47:14.623 回答