Python GUI编程学习笔记之tkinter事件绑定操作详解


Posted in Python onMarch 30, 2020

本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作。分享给大家供大家参考,具体如下:

相关内容:

  • command
  • bind
  • protocol

首发时间:2018-03-04 19:26


command:

  • command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数
  • 能够定义command的常见控件有: Button、Menu…
  • 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda
from tkinter import *
root=Tk()

def prt():
  print("hello")
def func1(*args,**kwargs):
  print(*args,**kwargs)
hello_btn=Button(root,text="hello",command=prt)#演示
hello_btn.pack()

args_btn=Button(root,text="获知是否button事件默认有参数",command=func1)#获知是否有参数,结果是没有

args_btn.pack()
btn1=Button(root,text="传输参数",command=lambda:func1("running"))#强制传输参数

btn1.pack()

root.mainloop()

bind:

  • bind的用法:控件.bind(event, handler),其中event是tkinter已经定义好的的事件,handler是处理器,可以是一个处理函数,如果相关事件发生, handler 函数会被触发, 事件对象 event 会传递给 handler 函数
  • 基本所有控件都能bind
  • 常见event有:
    • 鼠标单击事件:鼠标左键点击为 <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>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    • 鼠标移入控件事件:<Enter>
    • 获得焦点事件:<FocusIn>
    • 鼠标移出控件事件: <Leave>
    • 失去焦点事件:<FocusOut>
    • 鼠标按下移动事件:鼠标左键点击为 <B1-Motion>, 鼠标中键点击为 <B2-Motion>, 鼠标右键点击为 <B3-Motion>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    • 键盘按下事件:<Key>,event中的keysym ,keycode,char都可以获取按下的键【其他想要获取值的也可以先看看event中有什么】
    • 键位绑定事件:<Return>回车键,<BackSpace>,<Escape>,<Left>,<Up>,<Right>,<Down>…….
    • 控件大小改变事件:<Configure>,新的控件大小会存储在 event 对象中的 width 和 height 属性传递. 有些平台上该事件也可能代表控件位置改变.
  • Event中的属性:
    • widget:产生事件的控件
    • x, y:当前鼠标的位置
    • x_root, y_root:当前鼠标相对于屏幕左上角的位置,以像素为单位。
    • char:字符代码(仅限键盘事件),作为字符串。
    • keysym:关键符号(仅限键盘事件)。
    • keycode:关键代码(仅限键盘事件)。
    • num:按钮号码(仅限鼠标按钮事件)。
    • width, height:小部件的新大小(以像素为单位)(仅限配置事件)。
    • type:事件类型。
from tkinter import *
root=Tk()
root.geometry("200x200")
text=Text(root)
text.pack()

def func(event):
  print(event)
def func_release(event):
  print("release")
#单击
# text.bind("<Button-1>",func)
# root.bind("<Button-1>",func)
#双击
# text.bind("<Double-Button-1>",func)
# 鼠标释放
# text.bind("<ButtonRelease-1>",func_release)
#鼠标移入
# text.bind("<Enter>",func)
#鼠标按住移动事件
# text.bind("<B1-Motion>",func)
#键盘按下事件
# text.bind("<Key>",func)

#键位绑定事件
# def func3(event):
#   print("你按下了回车!")
# text.bind("<Return>",func3)


#实现的一个拖拽功能
def func4(event):
  # print(event)
  x=str(event.x_root)
  y=str(event.y_root)
  root.geometry("200x200+"+x+"+"+y)

text.bind("<B1-Motion>",func4)




root.mainloop()

补充:如果想要传参,可以使用lambda:

text.bind("<Button-1>",lambda event:func(event,"hello"))

 Python GUI编程学习笔记之tkinter事件绑定操作详解

Python GUI编程学习笔记之tkinter事件绑定操作详解


protocol:

  • protocol的使用:控件.protocol(protocol,handler),其中控件为窗口对象(Tk,Toplevel)
  • 常见protocol有:
    • WM_DELETE_WINDOW:最常用的协议称为WM_DELETE_WINDOW,用于定义用户使用窗口管理器明确关闭窗口时发生的情况。如果使用自己的handler来处理事件的话,这时候窗口将不会自动执行关闭
    • WM_TAKE_FOCUS,WM_SAVE_YOURSELF:[这两个不知道什么来的。]
    • 更多需参考ICCCM文档
  • 注意:要留心协议的写法,在作为字符串填入时不要加多余的空格
from tkinter import *
import tkinter.messagebox
root=Tk()
root.geometry("200x200")
def func1():
  if tkinter.messagebox.askyesno("关闭窗口","确认关闭窗口吗"):
    root.destroy()

root.protocol("WM_DELETE_WINDOW",func1)

root.mainloop()

想要了解更多,可以参考tkinter的官方文档:http://effbot.org/tkinterbook/

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python验证码识别实例代码
Feb 03 Python
Django后台获取前端post上传的文件方法
May 28 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
Python3常用内置方法代码实例
Nov 18 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 #Python
Python实现Wordcloud生成词云图的示例
Mar 30 #Python
Django ModelForm操作及验证方式
Mar 30 #Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 #Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 #Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 #Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 #Python
You might like
一次编写,随处运行
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
pandas值替换方法
2018/07/10 Python
Python数据可视化之画图
2019/01/15 Python
python实现AES加密和解密
2019/03/27 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
专升本自我鉴定
2013/10/10 职场文书
2013年入党人员的自我鉴定
2013/10/25 职场文书
总经理岗位职责范本
2014/02/02 职场文书
青春演讲稿范文
2014/05/08 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python