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

6 python tabs tkinter python-3.x

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

有没有办法自定义订单,更重要的是,将CTRL+ 更改Tab为只是Tab?

Bry*_*ley 15

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

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

这是一个显示如何反转Tab键顺序的示例.运行示例时,按第一个条目中的tab键可以将您带到最后一个.再次按下标签将您带到第二个,然后第一个,起泡,冲洗,重复

请注意,本机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()
Run Code Online (Sandbox Code Playgroud)

既然你提到你必须做CTRL+ Tab,我猜你正试图让tab键从文本小部件改变焦点.通常,Tab键会插入文字选项卡.如果您想要更改焦点,只需为<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"
Run Code Online (Sandbox Code Playgroud)