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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
python进程和线程用法知识点总结
May 28 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
django queryset相加和筛选教程
May 18 Python
pymysql模块使用简介与示例
Nov 17 Python
python 实现aes256加密
Nov 27 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
人机交互程序 python实现人机对话
2017/11/14 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
基于python中__add__函数的用法
2019/11/25 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
财务主管自我鉴定
2014/01/17 职场文书
结对共建工作方案
2014/06/02 职场文书
质量安全标语
2014/06/07 职场文书
领导干部对照检查材料
2014/08/24 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
预备党员群众意见
2015/06/01 职场文书
合同审查法律意见书
2015/06/04 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技