1. 方法总结
tkinter中事件绑定方法可以分为两大类:
- 组件对象的绑定,包含2种方法:
- 通过command属性绑定,适合简单不需要获取event对象的情况,
例如:Button(root,text="登录",command=login)
; - 通过
bind()
方法绑定,适合需要获取event对象的情况,
例如:l=Label(text="A"); l.bind("<Button-1>",sendMessage);
- 通过command属性绑定,适合简单不需要获取event对象的情况,
- 组件类的绑定:通过调用对象的
bind_class
函数,将该组件类所有的组件绑定事件,
例如btn.bind_class("<Button-1>",func)
2. 示例代码
from tkinter import *def mouse_test01(name, sex):print("command方式绑定,不能直接获取event对象,可以接受参数")print("name:{},b:{}".format(name, sex))print("====================")def mouse_test02(event):print("bind()方式绑定,可以获取event对象")print(event.widget)print("====================")def mouse_test03(event):print("bind_class方式绑定所有类,可以获取event对象")print(event.widget)print("====================")if __name__ == '__main__':root = Tk()btn01 = Button(root, text="command方式绑定", command=lambda: mouse_test01("sz", "male"))btn01.pack()btn02 = Button(root, text="bind()方式绑定")btn02.bind("<Button-1>", mouse_test02)btn02.pack()# 给所有按键添加右键事件btn01.bind_class("Button", "<Button-3>", mouse_test03)root.mainloop()
- 运行结果:
单击command方式测试按钮:
单击bind()方式测试按钮:
右击任意一个按钮:
注意:
- 代码中btn01 为什么使用 lambda表达式见这篇文章;
- 关于even对象更详细的说明见这篇文章