python - 如何从父小部件禁用所有用户输入小部件(按钮、条目..)?

标签 python tkinter tk-toolkit

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

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

我相信这应该是可能的。有谁知道如何做到这一点?

最佳答案

Tk 小部件有一个state 配置选项,可以是normaldisabled。因此,您可以使用框架上的 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)))

关于python - 如何从父小部件禁用所有用户输入小部件(按钮、条目..)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382746/

相关文章:

python - tkinter 框架显示基础知识

python - 使用 tkinter 文本小部件创建日志框

python - 为什么此代码返回空白?在命令行和文本框中?没有错误,但也没有数据

tcl - 在带有菜单栏的隐式生成的顶级窗口上调用 'winfo children' 时出现奇怪的结果

python - Django 模型中的默认过滤器

python - 有没有办法在 Python3 的 super() 中忽略部分 __init__() 方法?

Python Pandas 删除重复单元格问题

Python 程序突然结束,我无法破译错误

python - 如何在centos中安装python3-tk?

python - 如何使用 Tkinter 创建等宽网格列?