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中利用sqrt()方法进行平方根计算的教程
May 15 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
使用Python写CUDA程序的方法
Mar 27 Python
python爬虫实战之最简单的网页爬虫教程
Aug 13 Python
Python实现调度算法代码详解
Dec 01 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
python3.6生成器yield用法实例分析
Aug 23 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
python实现猜数游戏
Mar 27 Python
Python3如何使用多线程升程序运行速度
Aug 11 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
php while循环得到循环次数
2013/10/26 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
详解Python中for循环的使用方法
2015/05/14 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
结婚保证书范文
2014/04/29 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
爱国主题班会教案
2015/08/14 职场文书
护理培训心得体会
2016/01/22 职场文书
初中数学教学反思范文
2016/02/17 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript