一个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 仅键盘事件,string

num 按钮num,仅鼠标事件

width,height widget新大小

type 事件类型

实例绑定和类绑定

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

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

绑定到widget instance 使用bind方法

绑定到widget的toplevel windows,顶层窗口,也是用bind

绑定到widget class,使用bind_class

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

python tkinter教程 博客园_python tkinter教程-事件绑定相关推荐

  1. python教程博客园_python学习(一)—简明python教程

    2016-04-12 15:59:47 1. 介绍 2. 安装Python 3. 最初的步骤 4. 基本概念 5. 运算符与表达式 6. 控制流 7. 函数 8. 模块 9. 数据结构 10. 解决问 ...

  2. python实现杨辉三角形博客园_Python实现杨辉三角

    杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年.杨辉三角是中国古代 ...

  3. python面试总结 博客园_python面试题总结

    Python语言特性 1. Python的函数参数传递 ​看两个如下例子,分析运行结果 #代码1 a = 1 def fun(a): a = 2 fun(a) print(a) #1 #代码2 a = ...

  4. python 面试题 博客园_python面试题

    1.一行代码实现1-100的和 print(sum(range(1,101))) #range中的参数是1<=i<101 #sum是计算参数的和 2.在函数内部改变全局变量 a = 5 d ...

  5. python读二进制文件博客园_python二进制读写文件

    基础: open(path, mode, b_buffer_size),需要指出的是第三个参数,它用来控制IO的时候是否使用缓存,这个缓存指的是python自己开辟的一片内存吧. seek(offse ...

  6. python的selenium模块博客园_Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径 2. 通过 `$PATH`环境变量找寻浏览器驱动 控制浏览器访问URL find系列函数定位元素 - `find_ ...

  7. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  8. 使用码云和博客园学习简易教程

    有了<使用开源中国(码云)托管代码>和<使用博客园进行学习>, 不少同学可以使用使用码云和博客园来学习了,也有不少同学还是误用.我以一周的学习过程为例,写一个step by s ...

  9. 用python自动登录博客园

    from selenium import webdriver import timea=webdriver.Chrome()a.get("http:\\www.baidu.com" ...

最新文章

  1. Linux终端实现自己的命令解释器----mybash
  2. spring aop 之链式调用
  3. Linux在任务栏上找不到最小化窗口的解决方法
  4. 一份其实很短的 LaTeX 入门文档
  5. linux安装下载中文包,linux下安装中文包和字体
  6. android x86 笔记本卡屏,笔记本死机卡屏怎么办
  7. git 删除tag_git使用教程9pycharm 使用 tag 打标签
  8. Redis 如何实现分布式锁?
  9. android Bundle的作用
  10. spark、hadoop 问题合集
  11. 高效编程之hashmap你不看就会忘记的知识点
  12. .NET单元测试(四):用例设计
  13. [内附完整源码和文档] 基于Java的人事档案管理系统
  14. CISCO三层交换机配置
  15. Linksys WRT54G2 V1刷ddwrt注意事项
  16. 2022idea报错快速解决方法图解:Invocation error: unable to read askpass response from ‘C:\Users\QKN\AppDat
  17. Hello 中国,Go官网回归中国
  18. 中国网络安全现状:“狼”已经来了
  19. 51页大数据湖总体规划及大数据湖一体化运营管理方案
  20. 双臂路由实现vlan间通信

热门文章

  1. nacos 公共_Nacos数据模型
  2. Android studio删除sdk的方法(图文教程)
  3. html页面icon字体无法显示,bootstrap中icon字体图标怎么不显示?
  4. java double 运算精度问题_关于java中Double类型的运算精度问题
  5. 表中字段变化sql语句如何出现
  6. eclipse插件安装,万能方法
  7. 用java进行LDAP用户登陆(用户认证)及修改密码
  8. Azure恢复服务-DPM联机备份SQL数据库
  9. windows编程点滴(四)之线程的同步
  10. 微信小程序前后端配合的支付代码