python - 如何在 tkinter 应用程序中设置 Tab 键顺序?

标签 python python-3.x tabs tkinter

我一直在寻找一种在我一直在研究的 tkinter 应用程序中设置 Tab 键顺序的方法。目前默认顺序似乎是从上到下工作的,但它需要使用 CTRL + Tab 来循环控制。

有没有办法自定义顺序,更重要的是,将 CTRL + Tab 更改为仅 Tab?

最佳答案

Tab 顺序基于堆叠顺序,而堆叠顺序又默认为小部件的创建顺序。您可以使用 tkraise 方法调整堆叠顺序(以及 Tab 键顺序) (或 lift )和 lower .

这应该是开箱即用的,无需按 CTRL + Tab。但是请注意,该选项卡会在文本小部件中插入文字选项卡,而不是将焦点移动到另一个控件。当然可以更改默认行为。

这是一个显示如何反转 Tab 键顺序的示例。运行该示例时,在第一个条目中按 Tab 键应该会带您到最后一个条目。再次按 Tab 键将带您进入第二个,然后是第一个,起泡沫,冲洗,重复

请注意 native Tk命令是 raiselower , 但自 raise是 Python 中的保留字,必须在 tkinter 中重命名。

import Tkinter as tk


class SampleApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        e1 = tk.Entry(self)
        e2 = tk.Entry(self)
        e3 = tk.Entry(self)

        e1.insert(0,"1")
        e2.insert(0,"2")
        e3.insert(0,"3")

        e1.pack()
        e2.pack()
        e3.pack()

        # reverse the stacking order to show how
        # it affects tab order
        new_order = (e3, e2, e1)
        for widget in new_order:
            widget.lift()


if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

由于您提到您必须执行 CTRL + Tab,我猜您正在尝试让 Tab 键从文本小部件更改焦点。通常一个制表键插入一个文字制表符。如果你想让它改变焦点,只需添加一个绑定(bind)到 <Tab>事件。

Tkinter 有一个函数可以返回下一个应该获得焦点的小部件的名称。不幸的是,对于旧版本的 Tkinter,该功能存在错误。但是,很容易解决这个问题。以下是您可以添加到上述代码中的几个方法:

    def _focusNext(self, widget):
        '''Return the next widget in tab order'''
        widget = self.tk.call('tk_focusNext', widget._w)
        if not widget: return None
        return self.nametowidget(widget.string)

    def OnTextTab(self, event):
        '''Move focus to next widget'''
        widget = event.widget
        next = self._focusNext(widget)
        next.focus()
        return "break"

关于python - 如何在 tkinter 应用程序中设置 Tab 键顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687108/

相关文章:

python - newB 在 Udacity Computer 与 Backus Naur 斗争。科学。 101

python - Mac 上的 wxPython 和 PyCharm

python - 为什么 PyGame 会拖拽图像?

python - 3darray 训练/测试 TensorFlow RNN LSTM

python - 重写时如何模拟基类的方法?

python - Python 中 CNTK 评估 API 的线程安全

JavaFX,在选项卡 Controller 之间传递参数

javascript - jQuery 选项卡 : Disable window location hash

javascript - 如何在不刷新 Controller 的情况下替换 Angular 位置?

python - 调用加载数据函数Python后存储数据集