【问题标题】:Change the focus from one Text widget to another将焦点从一个文本小部件更改为另一个
【发布时间】:2009-09-20 03:06:06
【问题描述】:

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

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

有谁知道这是否可以配置?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    使用 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() 方法将焦点设置到该小部件
    • 返回"break" 至关重要,因为它可以防止类绑定触发。正是此类绑定插入了您不想要的制表符。

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

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

    【讨论】:

    • 我有一个几乎不相关的问题,关于如何使一些额外的步骤发生以响应 而不 实际上阻止 执行其默认行为.这个答案完美地涵盖了它。谢谢!
    【解决方案2】:

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

    self.textEdit.setTabChangesFocus(True)

    【讨论】:

    • PyQt4 解决方案对于使用 Tkinter 的人来说毫无用处。
    【解决方案3】:

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

    【讨论】:

    • 我不明白;我确切地建议了stackoverflow.com/users/7432/bryan-oakley 在他接受的答案stackoverflow.com/questions/1450180/… 中写的内容,不是吗?
    • 你的回答太弱了,没用。我不认为焦点遍历是可定制的“由于跨平台性质”。跨平台与它无关。此外,您的回答说“它应该是可能的”。如果我正在寻求帮助并且有人说“这应该是可能的”,我觉得这并不令人放心。要么是,要么不是。最后,“扫描标签印刷机”毫无意义——没有办法“[扫描]标签印刷机”,你也没有说该怎么做。听起来你的答案是一个猜测,这使得它不太有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2018-08-30
    • 2010-12-20
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多