在下面的块中,单击a_frame会触发事件处理程序on_frame_click,但是单击a_label哪个子事件a_frame不会触发事件处理程序.有没有办法强制a_frame陷阱和处理源自它的孩子的事件(最好不必直接向孩子们添加处理程序)?我使用的是Python 3.2.3.
import tkinter
def on_frame_click(e):
print("frame clicked")
tk = tkinter.Tk()
a_frame = tkinter.Frame(tk, bg="red", padx=20, pady=20)
a_label = tkinter.Label(a_frame, text="A Label")
a_frame.pack()
a_label.pack()
tk.protocol("WM_DELETE_WINDOW", tk.destroy)
a_frame.bind("<Button>", on_frame_click)
tk.mainloop()
Run Code Online (Sandbox Code Playgroud) Tcl/Tk 允许通过以下语法生成虚拟事件:
event generate .myWidget <<whatever>> -data "arbitrary text here"
Run Code Online (Sandbox Code Playgroud)
绑定到此事件的 Tcl/Tk 句柄将允许-data通过%d替换访问选项的值。从 python,我可以绑定到这个事件:
def on_whatever(event):
print("Meh")
myWidget.bind("<<whatever>>", on_whatever, add="+")
Run Code Online (Sandbox Code Playgroud)
到目前为止,这对我来说很好用,但是我无法从 python 中找到任何方法来访问 tcl/tk 事件的-data字段。