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

时间:2009-09-20 03:06:07

标签: python tkinter

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

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

有人知道这是否可配置?

4 个答案:

答案 0 :(得分: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)

有关此代码的重要信息:

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

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

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

答案 1 :(得分:0)

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

self.textEdit.setTabChangesFocus(True)

答案 2 :(得分:-1)

不确定TKinter,但是使用PyQt,可以将函数连接到选项卡框发出的选项卡更改信号(信号也带有int值)。但据我所知,Qt非常擅长做正确的事情而不指定它。

答案 3 :(得分:-2)

焦点遍历有点可定制,通常让X windows管理器处理它(焦点跟随鼠标或点击)。根据{{​​3}},应该可以the manual针对关键新闻事件的事件,按Tab键,并在这些情况下触发bind事件。