✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”🌈
目录
🌻前言
🍋鼠标和键盘事件
🌟event 对象常用属性
🍺测试键盘和鼠标事件
🌲lambda 表达式详解
❤️测试lambda用法
🏆多种事件绑定方式汇总
组件对象的绑定
组件类的绑定
🍉多种事件绑定方式汇总
🚀往期回顾
🌻前言
一个 GUI 应用整个生命周期都处在一个消息循环(event loop) 中。它等待事件的发生,并作出相应的处理。Tkinter 提供了用以处理相关事件的机制. 处理函数可被绑定给各个控件的各种事件。
widget.bind(event, handler)
如果相关事件发生, handler 函数会被触发, 事件对象event 会传递给 handler 函数.
🍋鼠标和键盘事件
🌟event 对象常用属性
🍺测试键盘和鼠标事件
# coding=utf-8# 测试键盘和鼠标事件from tkinter import *root = Tk();root.geometry("530x300")c1 = Canvas(root,width=300,height=300,bg="pink")c1.pack()def mouseTest(event):print("鼠标左键单击位置(相对于父容器):{0},{1}".format(event.x,event.y))print("鼠标左键单击位置(相对于屏幕):{0},{1}".format(event.x_root,event.y_root))print("事件绑定的组件:{0}".format(event.widget))def testDrag(event):c1.create_oval(event.x,event.y,event.x+1,event.y+1)def keyboardTest(event):print("键的keycode:{0},键的char:{1},键的keysym:{2}".format(event.keycode,event.char,event.keysym))def press_a_test(event):print("press a")def release_a_test(event):print("release a")c1.bind("<Button-1>",mouseTest)c1.bind("<B1-Motion>",testDrag)root.bind("<KeyPress>",keyboardTest)root.bind("<KeyPress-a>",press_a_test)#只针对小写的a,大写的A不管用root.bind("<KeyRelease-a>",release_a_test)root.mainloop()
结果如下:
随便写了数字,事件发生,鼠标事件与键盘事件。
🌲lambda 表达式详解
lambda 表达式定义的是一个匿名函数,只适合简单输入参数,简单计算返回结果,不适合功能复杂情况。lambda 定义的匿名函数也有输入、也有输出,只是没有名字。语法格式如下:
lambda 参数值列表:表达式参数值列表即为输入。表达式计算的结构即为输出。
写 一 个 最 简 单 的 案 例 : add3args =lambdax,y,z:x+y+z #print(add3args(10,20,30))
上面的lambda 表达式相当于如下函数定义:
def add3args(x,y,z):return x+y+z
lambda 表达式的参数值列表可以为如下内容:
❤️测试lambda用法
from tkinter import *root = Tk();root.geometry("270x50")def mouseTest1():print("command方式,简单情况:不涉及获取event对象,可以使用")def mouseTest2(a,b):print("a={0},b={1}".format(a,b))Button(root, text="测试command1",command=mouseTest1).pack(side="left")Button(root, text="测试command2",command=lambda: mouseTest2("小", "白")).pack(side="left")root.mainloop()
在弹出框中进行事件的选择。
🏆多种事件绑定方式汇总
组件对象的绑定
通过command 属性绑定(适合简单不需获取event 对象)
Button(root,text=”登录”,command=login)
通过bind()方法绑定(适合需要获取event 对象)
c1 = Canvas(); c1.bind(“<Button-1>”,drawLine)
组件类的绑定
调用对象的bind_class 函数,将该组件类所有的组件绑定事件:
w.bind_class(“Widget”,”event”,eventhanler)
🍉多种事件绑定方式汇总
from tkinter import *root = Tk();root.geometry("270x30")def mouseTest1(event):print("bind()方式绑定,可以获取event对象")print(event.widget)def mouseTest2(a, b):print("a={0},b={1}".format(a, b))print("command方式绑定,不能直接获取event对象")def mouseTest3(event):print("右键单击事件,绑定给所有按钮啦!!")print(event.widget)b1 = Button(root, text="测试bind()绑定")b1.pack(side="left")# bind方式绑定事件b1.bind("<Button-1>", mouseTest1)# command属性直接绑定事件b2 = Button(root, text="测试command2",command=lambda: mouseTest2("小白", "加油"))b2.pack(side="left")# 给所有Button按钮都绑定右键单击事件<Button-2>b1.bind_class("Button", "<Button-2>", mouseTest3)root.mainloop()
🚀往期回顾
📣GUI 图形用户界面编程(一):(278条消息) GUI 图形用户界面编程(一)_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(二):
(278条消息) GUI 图形用户界面编程(二)经典案例_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(三):
(278条消息) GUI 图形用户界面编程(三)基本框架与Label的使用_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(四):
(278条消息) GUI 图形用户界面编程(四)-Button组件_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(五):
(357条消息) GUI 图形用户界面编程(五)-登录页面_am_student的博客-CSDN博客