事件绑定

一个 Tkinter 应用程序大部分时间花费在事件循环中(通过 mainloop() 方法进入)。事件可以有各种来源:包括用户触发的鼠标和键盘操作和窗口管理器触发的重绘事件(在多数情况下是由用户间接引起的)。Tkinter 提供一个强大的机制可以让你自由地处理事件,对于每个组件来说,你可以通过 bind() 方法将函数或方法绑定到具体的事件上

widget.bind(event, handler)

当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件对象(Event)去调用 handler() 方法。

eg: 我们使用 Frame 组件的 bind() 方法将鼠标点击事件(<Button-1>)和我们自定义的 callback() 方法绑定起来。那么运行后的结果是——当你在点击鼠标左键的时候,IDLE 会相应的将鼠标的位置显示出来(event.x, event.y)

只有当组件获得焦点的时候才能接收键盘事件(Key),下边例子中我们用 focus_set() 获得焦点,当你你可以设置 Frame 的 takefocus 选项为 True,然后使用 Tab 将焦点转移上来。(敲击位置 repr(event.char))

下方主要内容:

  • 事件序列
  • type
  • modifier
  • Event 对象
  • Key names

事件序列

Tkinter 使用一种称为事件序列的机制来允许用户定义事件,用户需使用 bind() 方法将具体的事件序列与自定义的方法相绑定。

<modifier-type-detail>

  • 事件序列是包含在尖括号(<...>)中
  • type 部分的内容是最重要的,它通常用于描述普通的事件类型,例如鼠标点击或键盘按键点击(详见下方)。
  • modifier 部分的内容是可选的,它通常用于描述组合键,例如 Ctrl + c,Shift + 鼠标左键点击(详见下方)。
  • detail 部分的内容是可选的,它通常用于描述具体的按键,例如 Button-1 表示鼠标左键。

EG:

事件序列

含义

<Button-1>

用户点击鼠标左键

<KeyPress-H>

用户点击 H 按键

<Control-Shift-KeyPress-H>

用户同时点击 Ctrl + Shift + H

type

type

含义

Activate

当组件的状态从“未激活”变为“激活”的时候触发该事件

Button

1. 当用户点击鼠标按键的时候触发该事件

2. detail 部分指定具体哪个按键:<Button-1>鼠标左键,<Button-2>鼠标中键,<Button-3>鼠标右键,<Button-4>滚轮上滚(Linux),<Button-5>滚轮下滚(Linux)

ButtonRelease

1. 当用户释放鼠标按键的时候触发该事

2. 在大多数情况下,比 Button 要更好用,因为如果当用户不小心按下鼠标,用户可以将鼠标移出组件再释放鼠标,从而避免不小心触发事件

Configure

当组件的尺寸发生改变的时候触发该事件

Deactivate

当组件的状态从“激活”变为“未激活”的时候触发该事件

Destroy

当组件被销毁的时候触发该事件

Enter

1. 当鼠标指针进入组件的时候触发该事件

2. 注意:不是指用户按下回车键

Expose

当窗口或组件的某部分不再被覆盖的时候触发该事件

FocusIn

1. 当组件获得焦点的时候触发该事件

2. 用户可以用 Tab 键将焦点转移到该组件上(需要该组件的 takefocus 选项为 True)

3. 你也可以调用 focus_set() 方法使该组件获得焦点(见上方例子)

FocusOut

当组件失去焦点的时候触发该事件

KeyPress

1. 当用户按下键盘按键的时候触发该事件

2. detail 可以指定具体的按键,例如 <KeyPress-H>表示当大写字母 H 被按下的时候触发该事件

3. KeyPress 可以简写为 Key

KeyRelease

当用户释放键盘按键的时候触发该事件

Leave

当鼠标指针离开组件的时候触发该事件

Map

1. 当组件被映射的时候触发该事件

2. 意思是在应用程序中显示该组件的时候,例如调用 grid() 方法

Motion

当鼠标在组件内移动的整个过程均触发该事件

MouseWheel

1. 当鼠标滚轮滚动的时候触发该事件

2. 目前该事件仅支持 Windows 和 Mac 系统,Linux 系统请参考 Button

Unmap

1. 当组件被取消映射的时候触发该事件

2. 意思是在应用程序中不再显示该组件的时候,例如调用 grid_remove() 方法

Visibility

当应用程序至少有一部分在屏幕中是可见的时候触发该事件

modifier

在事件序列中,modifier 部分的内容可以是以下这些:

modifier

含义

Alt

当按下 Alt 按键的时候

Any

1. 表示任何类型的按键被按下的时候

2. 例如 <Any-KeyPress> 表示当用户按下任何按键时触发事件

Control

当按下 Ctrl 按键的时候

Double

1. 当后续两个事件被连续触发的时候

2. 例如 <Double-Button-1> 表示当用户双击鼠标左键时触发事件

Lock

当打开大写字母锁定键(CapsLock)的时候

Shift

当按下 Shift 按键的时候

Triple

跟 Double 类似,当后续三个事件被连续触发的时候

Event 对象

当 Tkinter 去回调你定义的函数的时候,都会带着 Event 对象(作为参数)去调用,Event 对象以下这些属性你可以使用:

属性

含义

widget

产生该事件的组件

x, y

当前的鼠标位置坐标(相对于窗口左上角,像素为单位)

x_root, y_root

当前的鼠标位置坐标(相对于屏幕左上角,像素为单位)

char

按键对应的字符(键盘事件专属)

keysym

按键名,见下方 Key names(键盘事件专属)

keycode

按键码,见下方 Key names(键盘事件专属)

num

按钮数字(鼠标事件专属)

width, height

组件的新尺寸(Configure 事件专属)

type

该事件类型

Key names

当事件为 <Key>,<KeyPress>,<KeyRelease> 的时候,detail 可以通过设定具体的按键名(keysym)来筛选。例如 <Key-H> 表示按下键盘上的大写字母 H 时候触发事件,<Key-Tab> 表示按下键盘上的 Tab 按键的时候触发事件。

下表列举了键盘所有特殊按键的 keysym 和 keycode:

(下边按键码是对应美国标准 101 键盘的“Latin-1”字符集,键盘标准不同对应的按键码不同,但按键名是一样的)

按键名(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 按键

Down

104

↓ 按键

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 按键

Left

100

← 按键

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_Down

88

小键盘的 ↓ 按键

KP_End

87

小键盘的 End 按键

KP_Enter

108

小键盘的 Enter 按键

KP_Home

79

小键盘的 Home 按键

KP_Insert

90

小键盘的 Insert 按键

KP_Left

83

小键盘的 ← 按键

KP_Multiply

63

小键盘的 * 按键

KP_Next

89

小键盘的 PageDown 按键

KP_Prior

81

小键盘的 PageUp 按键

KP_Right

85

小键盘的 → 按键

KP_Subtract

82

小键盘的 - 按键

KP_Up

80

小键盘的 ↑ 按键

Next

105

PageDown 按键

Num_Lock

77

NumLock(数字锁定)按键

Pause

110

Pause(暂停)按键

Print

111

PrintScrn(打印屏幕)按键

Prior

99

PageUp 按键

Return

36

Enter(回车)按键

Right

102

→ 按键

Scroll_Lock

78

ScrollLock 按键

Shift_L

50

左边的 Shift 按键

Shift_R

62

右边的 Shift 按键

Tab

23

Tab(制表)按键

Up

98

↑ 按键

EG:

from tkinter import *root = Tk()def callback(event):print('点击位置', event.x, event.y)print('敲击位置', repr(event.char))frame = Frame(root, width=200, height=100)
# 捕获鼠标点击事件<Button-x>
#frame.bind('<Button-1>', callback)# 捕获键盘Key事件,需要用focus_set()获得焦点
#frame.bind('<Key>', callback)
#frame.focus_set()# 捕捉运动轨迹 <Motion>
frame.bind('<Motion>', callback)frame.pack()
mainloop()

Tkinter - events and bindings事件绑定相关推荐

  1. [译][Tkinter 教程15] event 事件绑定

    已获原作者授权. 原系列地址: Python Tkinter 简介 一个 Tkinter 应用生命周期中的大部分时间都处在一个消息循环 (event loop) 中. 它等待事件的发生: 事件可能是 ...

  2. python tkinter教程 博客园_python tkinter教程-事件绑定

    一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...

  3. python tkinter listbox_python tkinter listbox事件绑定

    我很难让事件绑定与python/tkinter一起工作.我只是试图点击并打印位置,但每次我这样做,"-1"是结果. 这是我的密码from Tkinter import * impo ...

  4. tkinter事件绑定方法总结

    1. 方法总结 tkinter中事件绑定方法可以分为两大类: 组件对象的绑定,包含2种方法: 通过command属性绑定,适合简单不需要获取event对象的情况, 例如:Button(root,tex ...

  5. jQuery文本框(input textare)事件绑定方法教程

    jquery 的事件绑定已经用on替换了原来的bind,接下来为大家分享下bind的使用方法及input textare事件.目前1.7以上,jquery?的事件绑定已经用on替换了原来的bind,接 ...

  6. JavaScript事件绑定

    本文介绍一些JavaScript事件绑定的常用方法及其优缺点,同时在最后展示一个由 Dean Edwards 写的一个比较完美的事件绑定方案. 传统方式 element.onclick = funct ...

  7. nodeJS 事件绑定

    nodeJS事件模块格式 // 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter ...

  8. jQuery-1.9.1源码分析系列(十) 事件系统——事件绑定

    事件绑定的方式有很多种.使用了jQuery那么原来那种绑定方式(elem.click = function(){...})就不推荐了,原因? 最主要的一个原因是elem.click = fn这种方式只 ...

  9. jQuery的三种bind/One/Live/On事件绑定使用方法

    转载自   jQuery的三种bind/One/Live/On事件绑定使用方法 jQuery是 一款优秀的JavaScript框架,在旧版里主要用bind()方法,在新版里又多了两种One(),Liv ...

最新文章

  1. 超全Python IDE武器库大总结,优缺点一目了然!
  2. 10元权限gm游戏_游戏P图超能打!揭秘10年老本儿500元升级计划
  3. mysql repo_centos7下使用wget命令安装mysql
  4. mongodb查询值不为空_MongoDB使用规范(上)
  5. JavaScript数据结构和算法 1
  6. Linux的scan命令,linux的scan命令
  7. rootfs 制作ubuntu_为n1制作aarcm64/arm64 ubuntu rootfs系统
  8. 如何使用UI技术提升租房类APP的看房体验?
  9. 你应该知道的大数据领域12大动向
  10. JSP Cookie 处理
  11. linux 乌班图 lnmp环境搭建
  12. 20200908:链表类题目集合上
  13. oracle创建表空间语句分解
  14. redis源码剖析(2):基础数据结构ADLIST
  15. 正则匹配新闻内容案例,JS和PHP
  16. 【算法练习】82.重复的DNA序列——哈希表
  17. ONIE——开放网络安装环境
  18. python数学圆周率_Python编程超简单方法算圆周率
  19. 小程序textarea显示混乱
  20. 嵌入式linux 系统支持usb wifi BL-R8723BT1

热门文章

  1. 王文彬:阿里云的下一步
  2. 字节小组长无意得知手下有35K,自己却只有28K;谷歌推出Go版Android 11;Deepin v20正式发布!...
  3. 亚马逊echo中国使用_您可以(也可以不)使用多个Amazon Echo做的事情
  4. 查看RocketMQ的broker启动部分源码分析总结
  5. java基础:网络编程(一)简介
  6. info1110辅导quiz1
  7. 小白打卡python day 1
  8. 【渝粤题库】广东开放大学 成本会计 形成性考核
  9. python实现截竹竿
  10. MATLAB | 七夕节快到了,还不给朋友安排上这个咕呱小青蛙?