为什么不点击子元素传播到父元素?
from tkinter import *
root = Tk()
def handler(event):
print('clicked at', event.x, event.y)
frame = Frame(root, width=100, height=100)
label = Label(frame, text="Label")
frame.bind('<Button-1>', handler)
frame.pack()
label.pack(side=TOP)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
当我运行它时,单击标签不会触发处理程序.我知道事件默认传播给父母,如果你不想这样做,你必须返回"休息"
您最初的理解是,事件传播到其父级,这是不正确的.他们不.
不可否认,小部件有一个边缘情况,它是顶层窗口或根窗口的直接后代.即使在那里,这并不是说他们传播到他们的父母,而是他们通过绑定变量的定义正在被其他绑定处理,默认情况下每个部件都有它的顶层窗口,它的一个绑定标签.
如果要将绑定设置为可在任何位置使用,则可以使用该bind_all方法,因为默认情况下每个窗口小部件都有一个"all"绑定标记.另一种选择是为几个小部件提供相同的绑定标签(使用该bindtags方法),然后使用绑定到该绑定标签bind_class.您做出的选择取决于您要完成的任务.
bindtags非常强大 - 可以说比任何其他工具包的任何绑定机制更强大.例如,如果您需要传播事件,则可以通过调整每个窗口小部件的绑定标记来包含其所有祖先.然而,根据我的经验,很少需要这样的诡计.
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |