程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理
事件类型
用户通过鼠标、键盘、游戏控制设备在与图形界面交互时,就会触发事件。tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型。事件类型有其通用的定义方式。如下
<[modifier-]…type[-detail]>
其中方括号内的内容为可选参数
modifier为组合键的定义,例如,同时按下Ctrl键;
type为通用类型,例如,键盘按键(KeyPress)
detail用于具体信息,如按下键盘中‘B’键
常用事件类型如下:
【鼠标单击事件】
<Button-1 >:单击鼠标左键
<Button-2>:单击鼠标中间键(如果有)
<Button-3>:单击鼠标右键
<Button-4>:向上滚动滑轮
<Button-5>:向下滚动滑轮
【鼠标双击事件】
<Double-Button-1>:鼠标左键双击
<Double-Button-2>:鼠标中键双击
<Double-Button-3>.:鼠标右键双击
【鼠标释放事件】
<ButtonRelease-1>:鼠标左键释放
<ButtonRelease-2>:鼠标中键释放
<ButtonRelease-3>:鼠标右键释放
【鼠标按下并移动事件(即拖动)】
<B1-Motion>:左键拖动
<B2-Motion>:中键拖动
<B3-Motion>:右键拖动
【鼠标其他操作】
<Enter>:鼠标进入控件(放到控件上面)
<FocusIn>:控件获得焦点
<Leave>:鼠标移出控件
<FocusOut>:控件失去焦点
【键盘按下事件】
<Key>:键盘按下,事件event中的keycode,char都可以获取按下的键值
<Return>:键位绑定,回车键,其它还有<BackSpace>,<Escape>,<Left>,<Up>,<Right>,<Down>等等
【控件属性改变事件】
<Configure>:控件大小改变,新的控件大小会存储在事件event对象中的 width 和 height 属性传递,部分平台上该事件也代表控件位置改变。
【组合使用】
<Control-Shift-Alt-KeyPress-A>:同时按下Ctrl+Shift+Alt+A等4个键
<KeyPress-A>:按下键盘中的’A’键
游戏设备使用参见设备供应商提供的API函数,这里不再赘述,常用的事件类型就是这些了。大家没有必要全部记住,这些事件都是一种类英文的描述,只要记住主要的几个,按照<[modifier-]…type[-detail]>进行组合就可以了。
事件绑定
常见的事件绑定有以下几类
【创建组件对象实例时指定】
创建组件对象实例时,可以通过其命名参数command指定事件处理函数,如为Button控件绑定单击时间,当控件被单击时执行clickhandler函数处理
b = Button(root, text='按钮', command=clickhandler)
1
【实例绑定】
调用组件对象实例方法bind,可以为指定组件实例绑定事件
w.bind('<event>', eventhandler, add='')
1
其中,<event>为事件类型,eventhandler为事件处理函数,可选参数add默认为’’,表示事件处理函数替代其他绑定,如果为‘+’,则加入事件处理队列。
如绑定组件对象,使得Canvas组件实例c可以处理鼠标右键单击事件(处理函数名称为eventhandler),代码如下:
c=Canvas(); c.bind('Button-3', eventhandler)
1
【类绑定】
调用组件对象实例方法bind_class函数,可以为特定类绑定事件
w.bind_class('Widget', '<event>', eventhandler, add='')
1
其中,Widget为组件类;<event>为事件;eventhandler为事件处理函数
如绑定组件类,使得所有Canvas组件实例可以处理鼠标中键事件(事件处理函数为eventhandler)
c = Canvas(); c.bind_class('Canvas', '<Button-2>', eventhandler)
1
【程序界面绑定】
调用组件对象实例方法bind_all函数,可以为所有组件类型绑定事件
w.bind_all('<event>', eventhandler, add='')
1
同上,其中<event>为事件;eventhandler为事件处理函数
如将PrintScreen键与程序中所有组件对象绑定,使得程序界面能处理打印屏幕的键盘事件
c = Canvas(); c.bind('<Key-Print>', printscreen)
1
事件处理函数的编写
【定义事件函数和事件方法】
对于能通过command传入的函数,其参数没有必须指定第一个参数为event的要求。但是通过bind(含bind_class、bind_all,当然,bind_class第一个参数为className,但其后必须是Event实例)绑定的事件,在定义函数方法时(事件处理可以定义为函数,也可以定义为对象的方法),两者都带一个参数event。触发事件调用处理函数时,将传递Event对象实例。
函数定义
def handlerName(event):
1
函数内容
类中定义
def handlerName(self, event):
1
方法内容
【Event事件对象参数属性】
通过传递Event事件对象的属性,可以获取相关参数备程序使用。常用的Event事件参数有以下几种。
widget:产生该事件的控件
x, y:当前鼠标位置
x_root, y_root:当前鼠标相对于屏幕左上角(0,0)的位置,以像素px为单位。
char:字符代码(限键盘事件),作为字符串返回
keysym:关键符号(限键盘事件)
keycode:关键代码(限键盘事件)
num:按钮号码(限鼠标按钮事件)
width, height:小部件的新大小(以像素px为单位)(限配置事件)。
程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理的更多相关文章
- 人在囧途——Java程序猿学习Python
引言 LZ之前其实一直对python都很好奇,只是苦于平时没有时间去了解它,因此趁着51假期这个机会,便迫不及待的开始了自己的探索.作为一个标准的Java程序猿,在了解python的过程当中,LZ遇到 ...
- deepin下安装python的Tkinter库
在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...
- C#程序猿学习 Python
孙广东 2016.1.1 交互: C# 运行Python代码: http://stackoverflow.com/questions/11779143/run-a-python-script-fro ...
- Linux下使用Python的Tkinter库出现的No module named _tkinter问题
这是由于python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在linux才出现,windows版本一般已经包含了tkinter模块.
- Python(十)之GUI编程
在windwos上实现:使用wxPython模块 #!/usr/bin/env python # encoding: utf-8 import wx #创建open按钮触发的事件对应的函数 def l ...
- 【程序猿助手】Emacs,最强的编辑器,之间的不
wx_fmt=png" alt="" style="max-width:100%; height:auto!important"> 内容简单 ...
- python3.6 +tkinter GUI编程 实现界面化的文本处理工具
更新: 2017.07.17 补充滚动条.win批处理拉起py 2017.08.13 新增自定义图标 --------原创 blogs: http://www.cnblogs.com/ ...
- 实验十五 GUI编程练习与应用程序部署
实验十五 GUI编程练习与应用程序部署 实验时间 2018-12-6 一:理论部分 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可以 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
随机推荐
- Python常见数据结构-Tuple元组
Python Tuple基本特点 元组与列表类似,不同之处在于元组的元素不能修改. 与字符串和列表一样,可以根据下标进行切片索引. 元组使用小括号,单一元素的元组定义是必须加一个逗号. Python ...
- AJ学IOS(30)UI之Quartz2D画图片画文字
回头看了看自己写的博客,AJ决定以后更改风格 本意是想大家看效果直接拷贝代码能用,注释齐全也方便学习,但是发现这样对新手学习特别困难 以后风格基本是–>看标题–>看目录–>看图片–& ...
- AJ学IOS(14)UI之UITableView扩充_表格的修改_(增删移动)
AJ分享,必须精品 先看效果图 代码 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights rese ...
- Redis之事务操作
1.Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求 ...
- animation-play-state 在 ios 中不生效的解决办法(JS篇)
我们要实现动画的播放和暂停,animation-play-state 在安卓端可以使用,但是在 ios 中不起作用,这时可以使用 js 来实现相同效果. 原理 通过 js 获取当前元素的 transf ...
- Python基础:按位异或 ^ ,按位或 | ,按位与 &
前言文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http: ...
- Flask接口开发过程中的心得2019.10.03
完善了一下慕课网实战中的post接口开发,得到了一些进步: 代码如下: #coding=utf-8 from flask import Flask from flask import request ...
- (转载)基于BIGINT溢出错误的SQL注入
我对于通过MySQL错误提取数据的新技术非常感兴趣,而本文中要介绍的就是这样一种技术.当我考察MySQL的整数处理方式的时候,突然对如何使其发生溢出产生了浓厚的兴趣.下面,我们来看看MySQL是如何存 ...
- redis: Hash集合类型(六)
存值:hset myhash name applesnt 取值:hget myhash name 批量存值:hmset myhash name lisi address bj age 12 批量取值: ...
- GoJS 教程新手入门(资源整理,解决方案)
以下几个是我在百度.谷歌 上能找到的比较全的GoJs的一些东西,希望对各位有所帮助! 如有外网网站不能访问请自行FQ GoJS官网 第一个推荐的是GoJS的一个类似于社区的问题讨论区,这里面初学者的一 ...