改变Tkin中帧的标签顺序

2024-09-29 21:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

摘要

我如何lifttk_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特别引用了为单个框架内的小部件设置选项卡顺序。当我运行答案中包含的示例时,它按预期工作。但是,当应用到我的用例时:

  • 尝试提升框架不会导致制表符行为发生变化。

  • 尝试提升框架中包含的各个小部件会产生上面提到的错误。

MCVE公司

用python3.4编写。在

^{pr2}$

Tags: 版本框架表单顺序部件tkinterwidget用例
2条回答

您可以反转逻辑,并将lower应用于frames[1]

frames[1].lower()

而不是frames[2].lift(frames[1])

您可以调用lift(),而不必为所有帧按所需顺序设置参数:

for idx in [0,2,1]:
    frames[idx].lift()

相关问题 更多 >

    热门问题