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方法生成txt标签文件的实例代码
May 10 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
pandas计数 value_counts()的使用
Jun 24 Python
Python内存管理实例分析
Jul 10 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
Django数据模型中on_delete使用详解
Nov 30 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Django程序的优化技巧
Apr 29 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写杨辉三角实例代码
2011/07/17 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
JS中的多态实例详解
2017/10/15 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python获取文件ssdeep值的方法
2014/10/05 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Sanic框架配置操作分析
2018/07/17 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
python如何操作mysql
2020/08/17 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
财务总监管理岗位职责
2014/03/08 职场文书
员工安全承诺书
2014/05/22 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP