详解python tkinter教程-事件绑定


Posted in Python onMarch 28, 2019

一个Tkinter主要跑在mainloop进程里。Events可能来自多个地方,比如按键,鼠标,或是系统事件。

Tkinter提供了丰富的方法来处理这些事件。对于每一个控件Widget,你都可以为其绑定方法function。

widget.bind(event,handler)

如果相应的event发生了,就会调用handler处理事件。举个例子:

捕获鼠标点击事件:

from Tkinter import *

root = Tk()
def callback(event):
  print "clicked at", event.x, event.y
frame = Frame(root, width=100, height=100)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

在这里,我们使用frame的bind方法将一个callback方法绑定到一个事件,也就是点击鼠标左键,每点击一次,控制台打印出当前点击的坐标x,y。

键盘事件被发送到当前拥有焦点的widget,你可以用focus_set方法来设置widget们的焦点:

捕获键盘事件:

from Tkinter import *

root = Tk()

def key(event):
  print "pressed", repr(event.char)

def callback(event):
  print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

运行这个程序,你会发现,只有在当前窗口获取焦点的情况下,你按键盘键它才会捕获到并打印。

事件

事件用字符串定义,有一个特殊的语法规则:

<modifier-type-detail>

type字段是最重要的,它指出了事件的种类,可以指定为Button,Key或者Enter,Configure等等。modifier和detail字段可以提供一些附加信息,在大多数情况下可以不指定。还有很多方法可以简化事件字符串,比如:为了匹配一个键盘键,你可以省略尖角括号,直接用 键 即可。除非它是空格 , 或本身就是尖括号。

让我们来看看最常用的事件格式:

事件格式:

<Button-1>

一个鼠标点击事件。1代表左键,2代表中键,3代表右键。当你在一个widget上点击鼠标按键,tkinter会自动捕获并触发event,注意,当按键被抬起时才会执行handler。鼠标的位置(相对于widge)x,y会被发往event对象传入handler。你也可以这样:,<1>,它们是等价的。我比较喜欢这种方式。

<B1-Motion>

鼠标拖动事件。1代表按下左键拖动,2代表中键,3代表右键。同样的,鼠标的x,y会以event对象方式被送往handler。

<ButtonRelease-1>

鼠标按下之后释放

<Double-Button-1>

双击鼠标

<Enter>

注意,这里是鼠标指针进入到widget里,并不是代表按下键盘上的Enter键。

<Leave>

和上面的进入对应,鼠标离开widget。

<FocusIn> <FocusOut>

<Return> <Cancel> <BackSpace> <Tab> <Shift_L> <Control_L>
<Alt_L> <Home> <Left> <Up> <Right> <Down> <Delete> <F1> <F2>

这些按键都和键盘上的一一对应。

<Key>

随便一个按键,键值会以char的格式放入event对象。

a b c ... 1 2 ...

对应键盘上的按键

<Configure>

这个关键了,如果widget的大小改变了,或者是位置,新的大小(width和height)会打包到event发往handler。

事件对象

事件对象是独立的python实例,有很多属性。

对象属性:

  1. widget  产生event的实例,不是名字,所有对象拥有
  2. x,y     鼠标位置,单位:像素
  3. x_root,y_root       鼠标相对于屏幕左上角的位置,像素
  4. char        仅键盘事件,string
  5. num     按钮num,仅鼠标事件
  6. width,height        widget新大小
  7. type        事件类型

 实例绑定和类绑定

上面我们用的绑定方法是绑定到一个实例对象上,这就意味着,如果新建一个实例,它是没有绑定事件的。
实际上,tkinter允许你将事件绑定到类上,甚至是绑定到程序本身。你可以创建四个层面的绑定:

  1. 绑定到widget instance 使用bind方法
  2. 绑定到widget的toplevel windows,顶层窗口,也是用bind
  3. 绑定到widget class,使用bind_class

比如,你可以使用bind_all来创建一个F1键的绑定,这样你可以在任何地方打开帮助。

以上所述是小编给大家介绍的python tkinter事件绑定详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python遍历文件夹并删除特定格式文件的示例
Mar 05 Python
python遍历类中所有成员的方法
Mar 18 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
Python数据结构之翻转链表
Feb 25 Python
python 设置文件编码格式的实现方法
Dec 21 Python
python删除服务器文件代码示例
Feb 09 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
python脚本框架webpy模板控制结构
Nov 20 Python
Python中捕获键盘的方式详解
Mar 28 #Python
python sort、sort_index方法代码实例
Mar 28 #Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 #Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 #Python
Django实现单用户登录的方法示例
Mar 28 #Python
pyqt5实现登录界面的模板
May 30 #Python
python实现AES加密和解密
Mar 27 #Python
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
Python入门篇之字典
2014/10/17 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
浅析Python __name__ 是什么
2020/07/07 Python
岗位廉政承诺书
2014/03/27 职场文书
社会公德演讲稿
2014/05/20 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
故宫导游词
2015/01/31 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby