我正在使用Python和Tkinter设计GUI。注册用户输入命令所需的所有按钮和条目都放在主frame内,并且是它们的子窗口小部件。
我想知道是否可以通过传播一些"禁用"来禁用这些小部件的所有输入功能。从主框架到所有输入窗口小部件的标志。 通过这种方式,我希望能够在一行代码中切换状态。
我相信这应该是可能的。有谁知道怎么做?
答案 0 :(得分:4)
Tk小部件具有状态配置选项,可以是正常或已禁用。因此,您可以使用帧上的winfo_children
方法将帧的所有子项设置为禁用,以迭代它们。例如:
for w in app.winfo_children():
w.configure(state="disabled")
Ttk小部件具有状态方法,可能需要替代处理。您可能还想将 takefocus 选项设置为False,尽管我认为在移动焦点时会自动跳过禁用的小部件(例如:通过按Tab键)。
修改强>
如果需要,您可以使用winfo_children
和winfo_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)))