13_组件 事件绑定

1,基础概要

事件来源:鼠标和键盘操作,窗口管理器触发的重绘事件

通过 bind() 方法将函数或方法绑定到具体的事件上。
当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件对象(Event)去调用 handler() 方法。
import tkinter as tk

window = tk.Tk()
window.title('hello thinter')
height = window.winfo_screenheight()
width = window.winfo_screenwidth()
window.geometry('600x400+%d+%d' % ((width - 600) / 2, (height - 400) / 2))

# 鼠标点击位置
def mouseclick(event):
    print("点击:", event.x, event.y)

frame1 = tk.Frame(window, width=100, height=100, bd=1, relief='sunken')
frame1.bind("<Button-1>", mouseclick)
frame1.place(x=200, y=0)

# 键盘按键,似乎可以打字
def keyboard(event):
    print("按键:", event.char)

frame2 = tk.Frame(window, width=100, height=100, bd=1, relief='sunken')
frame2.bind("<Key>", keyboard)
frame2.focus_set()
frame2.place(x=300, y=0)

# 鼠标移动坐标
def moveline(event):
    print("坐标:", event.x, event.y)

frame3 = tk.Frame(window, width=200, height=200, bd=1, relief='sunken')
frame3.bind("<Motion>", moveline)
frame3.place(x=200, y=100)

window.mainloop()

2,详细解释

事件序列

Tkinter 使用一种称为"事件序列的机制"来定义事件,使用 bind() 方法将事件序列与自定义的方法绑定。
事件序列是以字符串的形式表示的,可以表示一个或多个相关联的事件(如果是多个事件,那么对应的方法只有在满足所有事件的前提下才会被调用)。

事件序列语法:<modifier-type-detail>

事件序列是包含在尖括号(<...>)中
    type'必填内容'、通常用于描述普通的事件类型,例如 鼠标点击或键盘按键点击
    modifier:可选内容、通常用于描述组合键,例如 Ctrl + c,Shift + 鼠标左键点击
    detail:可选内容、它通常用于描述具体的按键,例如 Button-1 表示鼠标左键

例:事件序列	含义
<Button-1>	点击鼠标左键
<KeyPress-H>	按 H 按键
<Control-Shift-KeyPress-H>	组合键 Ctrl + Shift + H

type

type 含义
KeyPress 1,当按下键盘按键的时候触发该事件
2,指定具体按键,例大写字母H被按下的时触发
3,KeyPress可以简写为Key,指任何键
KeyRelease 用户释放键盘按键的时候触发该事件
Button 按下鼠按键时触发该事件
鼠标左键,中键,右键,滚轮上
ButtonRelease 释放鼠标键时触发该事件
某些情况下,比Button好用,误按下鼠标,可移动至组件外释放,避免触发事件
Motion 鼠标在组件内移动的个过程均触发该事件
Enter 当鼠标指针进入组件的时候触发该事件
注意:不是指用户按下"回车键"
Leave 当鼠指针离开组件的时候触发该事件
Focusin 1,当组件获得焦点的时候触发该事件
2,用户可以用Tab键将焦点转移到该组件上(组件的 takefocus=True)
3,你也可以调用 focus_set() 方法使该组件得焦点
FocusOut 当组件失去焦点的时候触发该事件
Configure 当组件尺寸发生改变时触发该事件
Destroy 当组件被销毁时触发该事件
MouseWheel 当鼠标滚轮滚动的时候触发该事件
该事件仅支持Windows和Mac,Linux请参考Button
Activate 当组件的状态从“未激活"变为"激活"的时候触发该事件
Deactivate 当组件的状态从“激活"变为"未激活"的时候触发该事件
Expose 当窗口或组件的某部分不再被覆盖的时候触发该事件
Map 当组件被映射的时候触发该事件
意思是在应用程序中显示该组件的时候,例如调用 grid()方法
Unmap 当组件被取消映射的时候触发该事件
意思是在应用程序中不再显该组件的时候,例调用 grid_remove() 方法
Visibility 当应用程序至少有一部分在屏幕中是可见的时候触发该事件

modifier

modifier 含义
Control 当按下 Ctrl 按键的时候
Shift 当按下 Shift 按键的时候
Alt 当按下 Alt 按键的时候
Any 1,表示任何类型的按键被按下的时候
2,例表示当按下任何按键时触发事件
Lock 当打开大写字母锁定键 CapsLock 的时候
Double 1,当后续两个事件被连续触发的时候
2,例表当双击鼠标键时触发事件
Triple 跟Double类似,当后续三个事件被连续触发的时候

Event对象

属性 含义
type 该事件类型
widget 产生该事件的组件
x,y 当前的鼠标位置坐标(相对于窗口左上角,像素为单位)
x_root,y_root 当前的鼠标位置坐标(相对于屏幕左上角,像素为单位)
char 按键对应的字符(键盘事件专属)
ksysym 按键名,见下方Keynames(键盘事件专属)
keycode 按键码,见下方Keynames(键盘事件专属)
num 按钮数字(鼠标事件专属)
width,height 组件的新尺寸(Configure事件专属)

Key names

按键名(keysym) 按键码(keycode) 代表的按键
Alt_L 64 左边的Alt按键
Alt_R 113 右边的Alt按键
BackSpace 22 Backspace(退格)按键
Cancel 110 break按键
Caps_Lock 66 CapsLock(大写字母锁定)按键
Control_L 37 左边的Ctrl按键
Control_R 109 右边的Ctrl按键
Delete 107 Delete按键
Up 98
Down 104
Left 100
Right 102
End 103 End按键
Escape 9 Esc按键
Execute 111 SysReq按键
F1 67 F1按键
F2 68 F2按键
F3 69 F3按键
F4 70 F4按键
F5 71 F5按键
F6 72 F6按键
F7 73 F7按键
F8 74 F8按键
F9 75 F9按键
F10 76 F10按键
F11 77 F11按键
F12 96 F12按键
Home 97 Home按键
Insert 106 Insert按键
Linefeed 54 Linefeed(Ctrl+J)
KP_0 90 小键盘数字0
KP_1 87 小键盘数字1
KP_2 88 小键盘数字2
KP_3 89 小键盘数字3
KP_4 83 小键盘数字4
KP_5 84 小键盘数字5
KP_6 85 小键盘数字6
KP_7 79 小键盘数字7
KP_8 80 小键盘数字8
KP_9 81 小键盘数字9
KP_Add 86 小键盘的+按键
KP_Begin 84 小键盘的中间按键(5)
KP_Decimal 91 小键盘的点按键(.)
KP_Delete 91 小键盘的删除键
KP_Divide 112 小键盘的/按键
KP_End 87 小键盘的End按键
KP_Enter 108 小键盘的Enter按键
KP_Home 79 小键盘的Home按键
KP_Insert 90 小键盘的Insert按键
KP_Multiply 63 小键盘的*按键
KP_Next 89 小键盘的PageDown按键
KP_Prior 81 小键盘的PageUp按键
KP_Subtract 82 小键盘的-按键
KP_Up 80 小键盘的 ↑
KP_Down 88 小键盘的 ↓
KP_Left 83 小键盘的 ←
KP_Right 85 小键盘的 →
Next 105 PageDown按键
Num_Lock 77 NumLock(数字锁定)按键
Pause 110 Pause(暂停)按键
Print 111 PrintScrn(打印屏幕)按键
Prior 99 PageUp按键
Return 36 Enter(回车)按键
Scroll_Lock 78 ScrollLock按键
Shift_L 50 左边的Shift按键
Shift_R 62 右边的Shift按键
Tab 23 Tab(制表)按键
posted @   interesting5319  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示