Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在tkinter应用程序中设置选项卡顺序?_Python_Python 3.x_Tabs_Tkinter - Fatal编程技术网

Python 如何在tkinter应用程序中设置选项卡顺序?

Python 如何在tkinter应用程序中设置选项卡顺序?,python,python-3.x,tabs,tkinter,Python,Python 3.x,Tabs,Tkinter,我一直在寻找一种在tkinter应用程序中设置选项卡顺序的方法,这是我一直在研究的。当前,默认顺序似乎是自上而下的,但它需要使用CTRL+Tab在控件之间循环 有没有办法自定义顺序,更重要的是,将CTRL+Tab更改为just Tab?选项卡顺序基于堆叠顺序,而堆叠顺序又默认为小部件的创建顺序。您可以使用方法tkraise(或lift)和lower调整堆叠顺序(从而调整标签顺序) 这对您来说应该是开箱即用的,无需按CTRL+Tab键。但是,请注意,该选项卡在文本小部件中插入文字选项卡,而不是将焦

我一直在寻找一种在tkinter应用程序中设置选项卡顺序的方法,这是我一直在研究的。当前,默认顺序似乎是自上而下的,但它需要使用CTRL+Tab在控件之间循环


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

选项卡顺序基于堆叠顺序,而堆叠顺序又默认为小部件的创建顺序。您可以使用方法
tkraise
(或
lift
)和
lower
调整堆叠顺序(从而调整标签顺序)

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

下面是一个示例,演示如何反转选项卡顺序。运行该示例时,按第一个条目中的tab键应该可以转到最后一个条目。再次按tab键将进入第二个,然后是第一个,起泡,冲洗,重复

请注意,本机
Tk
命令是
raise
lower
,但由于
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键从文本小部件更改焦点。通常,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"