为什么 "all" 代表 tkinter 中的 bindtags?

for what "all" stands in bindtags in tkinter?

在给定的答案 Here i saw use of "all" in tkinter's bindtags 中,但无法弄清楚它代表什么。它是整个应用程序的最顶层还是其他?

它代表“所有小部件”。它只是一个字符串,默认情况下所有小部件都将其作为其绑定标签的一部分。当您想要创建对整个应用程序中的所有小部件都有效的绑定时,它很有用。

当您调用 bind 时,您实际上并没有绑定到小部件 本身 。您绑定到与小部件对应的标签。例如,如果您创建一个 Entry 小部件,则该小部件的绑定标签可能类似于 ('.!entry', 'Entry', '.', 'all').

注意:如果您想查看任何小部件的绑定标签,请打印 bindtags 方法的结果(例如:print(my_widget.bindtags())

列表中的第一个元素是小部件本身,表示为小部件的内部名称。它后面是小部件 class,小部件所在的 window(在本例中,'.' 代表根 window),然后是特殊标签“all ”。您可以添加自己的标签,但很少需要这样做。

当小部件中发生事件时,tkinter 将遍历绑定标签以查找绑定。例如,如果您单击一个按钮,它会查看您是否对小部件本身进行了绑定。然后它将检查是否存在 Button class 的绑定。接下来它将检查整个 window 上是否有任何绑定。最后,它会检查“all”标签是否有绑定。

通过这种方式,可以添加适用于整个应用程序、window 中的每个小部件、特定 class 的所有小部件或特定小部件的绑定。您还可以添加自己的标签,或删除默认标签。例如,要删除 Entry 小部件的所有内置绑定,您可以从小部件绑定标签中删除 window class。然后它将没有默认绑定。