我正在使用 Python 和 Tkinter 设计 GUI。注册用户输入命令所需的所有按钮和条目都放在主 frame 中。并且是他们的子部件。
我想知道是否可以通过从主框架向所有输入小部件传播一些“禁用”标志来禁用这些小部件的所有输入功能。 通过这种方式,我希望能够在一行代码中切换它们的状态。
我相信这应该是可能的。有谁知道如何做到这一点?
最佳答案
Tk 小部件有一个state 配置选项,可以是normal 或disabled。因此,您可以使用框架上的 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)))
关于python - 如何从父小部件禁用所有用户输入小部件(按钮、条目..)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382746/