python中tkinter模块窗口操作(详解python tkinter教程-事件绑定)
python中tkinter模块窗口操作
详解python tkinter教程-事件绑定一个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实例,有很多属性。
对象属性:
- 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事件绑定详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://blog.csdn.net/u014027051/article/details/53813152
- python csv文件读取方法(对python读取zip压缩文件里面的csv数据实例详解)
- 详解Python locals()的陷阱(详解Python locals的陷阱)
- pythonselenium设置(解决Python selenium get页面很慢时的问题)
- pythonflask编写接口(Python Flask框架模板操作实例分析)
- python format的用法(Python中format格式输出全解)
- python爬虫模块教程(Python爬虫之UserAgent的使用实例)
- python合并多个excel可以刷新吗(python 实现读取一个excel多个sheet表并合并的方法)
- pythonrequests怎么导入模块(Python3使用requests模块实现显示下载进度的方法详解)
- python 正则表达式在代码里的使用(python中正则表达式与模式匹配)
- python安装pil模板教程(详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决)
- python与php比较(浅谈php调用python文件)
- python元组和列表的定义(Python基本数据结构与用法详解列表、元组、集合、字典)
- python程序怎么打包(Python 实现文件打包、上传与校验的方法)
- python线程池的实现原理(详解python中的线程与线程池)
- 闭包python讲解(详解Python循环作用域与闭包)
- opencv提取图像轮廓python代码(Python基于opencv调用摄像头获取个人图片的实现方法)
- 张勇 阿里新任掌门人(阿里新任掌门人)
- 毛戈平全国第一柜花落银泰 高端国货迎来 高光 时刻(毛戈平全国第一柜花落银泰)
- 14岁丧父 20岁丧母,从苦难走向辉煌的银泰创始人沈国军(14岁丧父20岁丧母从苦难走向辉煌的银泰创始人沈国军)
- 银泰集团董事长沈国军获评 北京影响力 十大企业家(银泰集团董事长沈国军获评)
- 15帅气男士发型,清爽时尚很有型,喜欢就试试(清爽时尚很有型)
- 哪几个历史人物被影协主席李雪健演的活灵活现(哪几个历史人物被影协主席李雪健演的活灵活现)
热门推荐
- mysqlgroupby用法(MySQL Group by的优化详解)
- php中isset函数有什么功能(PHP中的empty、isset、isnull的区别与使用实例)
- 织梦dedecms好吗(织梦dedecms单页制作教程)
- 微信小程序苹果部分内容打不开(微信小程序audio组件在ios端无法播放的解决办法)
- php生成md5(php进行md5加密简单实例方法)
- css鼠标点击效果怎么样(CSS实现鼠标滑过鼠标点击代码写法)
- python实现linux服务(Python实现Linux监控的方法)
- 开启wds点击保存没有反应(WDCP控制面板打开空白或无法登录的解决办法)
- python单例编程(浅谈Python反射 & 单例模式)
- asp.net后台输出js脚本
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9