如何从父窗口小部件禁用所有用户输入窗口小部件(按钮,条目..)?

时间:2014-03-13 15:04:25

标签: python tkinter tk

我正在使用Python和Tkinter设计GUI。注册用户输入命令所需的所有按钮和条目都放在主frame内,并且是它们的子窗口小部件。

我想知道是否可以通过传播一些"禁用"来禁用这些小部件的所有输入功能。从主框架到所有输入窗口小部件的标志。 通过这种方式,我希望能够在一行代码中切换状态。

我相信这应该是可能的。有谁知道怎么做?

1 个答案:

答案 0 :(得分:4)

Tk小部件具有状态配置选项,可以是正常已禁用。因此,您可以使用帧上的winfo_children方法将帧的所有子项设置为禁用,以迭代它们。例如:

for w in app.winfo_children():
    w.configure(state="disabled")

Ttk小部件具有状态方法,可能需要替代处理。您可能还想将 takefocus 选项设置为False,尽管我认为在移动焦点时会自动跳过禁用的小部件(例如:通过按Tab键)。

修改

如果需要,您可以使用winfo_childrenwinfo_parent方法在两个方向上遍历窗口小部件树,以访问子框架中包含的窗口小部件。例如,一个访问根小部件的每个子节点的简单函数:

def visit_widgets(root, visitor):
  visitor(root)
  for child in root.winfo_children():
    visit_widgets(child, visitor)

from __future__ import print_function
visit_widgets(app, lambda w: print(str(w)))