博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python tkinter教程-事件绑定
阅读量:5785 次
发布时间:2019-06-18

本文共 2074 字,大约阅读时间需要 6 分钟。

一个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("
", 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) frame.bind("
", callback) frame.pack() root.mainloop()

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

事件

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

 

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

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

 

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

 

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

 

鼠标按下之后释放

 

双击鼠标

 

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

 

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

 

 

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

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

a b c ... 1 2 ...

对应键盘上的按键

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

事件对象

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

对象属性:

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

 

实例绑定和类绑定

上面我们用的绑定方法是绑定到一个实例对象上,这就意味着,如果新建一个实例,它是没有绑定事件的。 

实际上,tkinter允许你将事件绑定到类上,甚至是绑定到程序本身。你可以创建四个层面的绑定:

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

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

转载地址:http://mpvyx.baihongyu.com/

你可能感兴趣的文章
克服大数据集群的挑战
查看>>
PostgreSQL并发控制(MVCC, 事务,事务隔离级别)
查看>>
DM***的第二阶段OSPF
查看>>
20180702搭建青岛RAC记录
查看>>
Spring Security OAuth 实现OAuth 2.0 授权
查看>>
linux文件及简单命令学习
查看>>
dubbo源码分析-架构
查看>>
新 Terraform 提供商: Oracle OCI, Brightbox, RightScale
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
IT兄弟连 JavaWeb教程 JSP与Servlet的联系
查看>>
Windows phone 8 学习笔记
查看>>
linux并发连接数:Linux下高并发socket最大连接数所受的各种限制
查看>>
详解区块链中EOS的作用。
查看>>
我的友情链接
查看>>
mysql-error 1236
查看>>
sshd_config设置参数笔记
查看>>
循序渐进Docker(一)docker简介、安装及docker image管理
查看>>
jsp页面修改后浏览器中不生效
查看>>
大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(四)高效的后台权限判断处理...
查看>>
信号量实现进程同步
查看>>