我如何lift
(tk_raise
)将一个框架中包含的小部件放在另一个框架中包含的小部件之上,而另一个框架是先创建的?在
我是在一个窗体中使用多个窗口框来定位的。在我的特定用例中,框架是从ttk.Frame
派生的类,但是这对这个问题没有任何影响,因为它对表单行为没有影响。在
对于我的用例,为了避免代码重复,在一个循环中创建多个帧是有意义的。正如预期的那样,小部件的制表顺序就是它们创建的顺序。然而,在本例中,表单的自然流程是按以下顺序在小部件之间进行制表符:[0, 1, 2, 3, 4, 10, 11, 12, 5, 6, 7, 8, 9]
(请参见下面的MCVE)。在
对包含小部件10-12的框架执行lift
操作不会改变制表符顺序。但是,在Widget 10-12上单独进行提升会产生以下异常:
_tkinter.TclError: can't raise ".tabtest.frame_2.widget_10" above ".tabtest.frame_1.widget_5
这应该是可行的,但是怎么做呢?在
正如评论(下面)所指出的,乍一看,这可能是问题"How to set the tab order in a tkinter application?"的重复。我在提交我的问题之前回顾了这个问题。然而,这个问题的answer特别引用了为单个框架内的小部件设置选项卡顺序。当我运行答案中包含的示例时,它按预期工作。但是,当应用到我的用例时:
尝试提升框架不会导致制表符行为发生变化。
尝试提升框架中包含的各个小部件会产生上面提到的错误。
用python3.4编写。在
^{pr2}$
您可以反转逻辑,并将
lower
应用于frames[1]
:而不是
frames[2].lift(frames[1])
您可以调用
lift()
,而不必为所有帧按所需顺序设置参数:相关问题 更多 >
编程相关推荐