Python [ GUI编程自学 ],虽然但是,还是想出一个系列

        Python [ GUI编程自学 ],虽然但是,还是想出一个系列。

        目前跟着哔站自学完毕,皮毛了解了,本文GUI一系列文章请查看Python_GUI编程专栏

        本篇主要介绍了事件处理机制:事件处理原理(感觉和之前学的交互式web开发有点像)、鼠标事件、键盘事件、event对象,以及三种事件绑定的方式...

        感兴趣的话欢迎点赞、收藏 + 关注!!

目录

事件处理机制

17. 事件机制和消息循环原理 鼠标事件 键盘事件 _event对象

1. 事件处理原理:

2. 错误代码(没找出来哪里错误了^_^)

3. 正确代码:文心一言

18. lambda表达式_事件传参应用

19. 三种事件绑定方式总结


事件处理机制

17. 事件机制和消息循环原理 鼠标事件 键盘事件 _event对象

1. 事件处理原理:

一个GUI应用整个生命周期都处在一个消息循环(eventloop)中。它等待事件的发生,并作出相应的处理。
Tkinter 提供了用以处理相关事件的机制:处理函数可被绑定给各个控件的各种事件。
widget.bind(event, handler)
如果相关事件发生,handler函数会被触发,事件对象event 会传递给 handler 函数。

2. 错误代码(没找出来哪里错误了^_^)

from tkinter import *
# 
# root = Tk()
# root.geometry('530x530')
# 
# c1 = Canvas(root, width=300, height=300, bg='green')
# c1.pack()
# 
# 
# def mouseTest(event):
#     print(f'鼠标左键单击位置(相对于父容器):{event.x},{event.y}')
#     print(f'鼠标左键单击位置(相对于屏幕):{event.x_root},{event.y_root}')
#     print(f'事件绑定的组件:{event.widget}')
# 
# 
# def testDrag(event):
#     c1.create_oval(event.x, event.y, event.x + 1, event.y + 1)
# 
# 
# def keyboardTest(event):
#     print(f'键的keycode:{event.keycode},键的char:{event.keychar},键的keysym:{event.keysym}')
# 
# 
# def press_a_test(event):
#     print('press a')
# 
# 
# def release_a_test(event):
#     print('release a')
# 
# 
# c1.bind('<Button-1>', mouseTest)
# c1.bind('<B1-Motion>', testDrag)
# 
# root.bind('<KeyPress>',keyboardTest)
# root.bind('<KeyPress-a>',press_a_test)
# root.bind('<KeyRelease-a>',release_a_test)
# 
# root.mainloop()

3. 正确代码:文心一言

from tkinter import *
​
root = Tk()
root.geometry('530x530')
​
c1 = Canvas(root, width=300, height=300, bg='green')
c1.pack()
​
​
def mouseTest(event):
    print(f'鼠标左键单击位置(相对于父容器):{event.x},{event.y}')
    print(f'鼠标左键单击位置(相对于屏幕):{event.x_root},{event.y_root}')
    print(f'事件绑定的组件:{event.widget}')
​
​
def testDrag(event):
    c1.create_oval(event.x, event.y, event.x + 10, event.y + 10)  # 增加半径以便更容易看到圆形
​
​
def keyboardTest(event):
    if event.keysym == 'a':
        print('press a')  # 现在在 keyboardTest 中处理 'a' 键的按下
    print(f'键的keycode:{event.keycode}, 键的char:{event.char}, 键的keysym:{event.keysym}')
​
​
def release_any_key(event):
    # 如果需要检测任何键的释放,可以这样做,但注意它不会告诉你具体是哪个键
    print('release any key')
​
​
c1.bind('<Button-1>', mouseTest)
c1.bind('<B1-Motion>', testDrag)
​
root.bind('<KeyPress>', keyboardTest)
# 移除了 <KeyPress-a> 绑定,因为它在 Tkinter 中不被支持
# 改为在 keyboardTest 中检查 event.keysym
​
# 如果你确实需要检测 'a' 键的释放,你可以设置一个通用的 <KeyRelease> 绑定
# 但请注意,它不会告诉你具体是哪个键被释放了(除非你在按下时跟踪它)
root.bind('<KeyRelease>', release_any_key)
​
root.mainloop()

18. lambda表达式_事件传参应用

lambda 表达式详解
lambda 表达式定义的是一个匿名所数,只适合简单输入参数,简单计算返回结果,不适合功能复杂情况。
lambda 定义的匿名函数也有输人、也有输出,只是没有名字。语法格式如下
lambda 参数值列表:表达式
参数值列表即为输入,
表达式计算的结构即为输出。

测试command属性绑定事件,测试lambda表达式帮助传参
from tkinter import *
​
root = Tk()
root.geometry('300x300')
​
​
def mouseTest1():
    print('command方式,简单情况:不涉及获取event对象,可以使用')
​
​
def mouseTest2(a,b):
    print(f'a={a},b={b}')       #注意参数传递
​
​
Button(root, text='测试commend1', command=mouseTest1).pack(side='left')
Button(root,text='测试commend2',command=lambda:mouseTest2('nihao','mengru')).pack(side='left')
​
root.mainloop()
 

19. 三种事件绑定方式总结

组件对象的绑定
1.通过 command属性绑定(适合简单不需获取 event 对象)Button(root,text=”登录”,command=login)2.通过 bind()方法绑定(适合需要获取 event 对象)c1 =Canvas(); c1.bind(“<Button-1>”,drawLine)
组件类的绑定
2.调用对象的 bind class数,将该组件类所有的组件绑定事件w.bind class(“Widget”,"event”,eventhanler)

右键单击事件不可用???

from tkinter import *
​
root = Tk()
root.geometry('270x30')
​
​
def mouseTest1(event):
    print('bind()方式绑定,可以获取event对象')
    print(event.widget)
​
def mouseTest2(a,b):
    print(f'a={a},b={b}')
    print('command方式绑定,不能直接获取event对象')
​
def mouseTest3(event):
    print('右键单击事件,绑定给所有按钮啦!')
    print(event.widget)
​
b1 = Button(root,text='测试bind()绑定')
b1.pack(side='left')
# bind()方式绑定事件
b1.bind('<Button-1>',mouseTest1)
​
# command属性直接绑定
b2 = Button(root,text='测试commend2',command=lambda:mouseTest2('nihao','mengru'))
b2.pack(side='left')
​
# 给所有Button按钮都绑定右键单击事件<Button-2>
b1.bind_class('Button','<Button-2>',mouseTest3)
​
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/876169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决win11 使用wsl工具,不能使用systemctl

使用systemctl命令出现报错&#xff1a; System has not been booted with systemd as init system (PID 1). Can‘t operate. 默认情况下并不启用 systemd&#xff0c;而是使用了其他轻量级的初始化系统&#xff08;SysV init初始化系统&#xff09;。这导致一些需要 system…

利用未标记数据的半监督学习在模型训练中的效果评估

数据科学家在实践中经常面临的一个关键挑战是缺乏足够的标记数据来训练可靠且准确的模型。标记数据对于监督学习任务&#xff08;如分类或回归&#xff09;至关重要。但是在许多领域&#xff0c;获取标记数据往往成本高昂、耗时或不切实际。相比之下&#xff0c;未标记数据通常…

Java获取随机数

在Java中获取随机数通常会使用java.util.Random类或者Math.random()方法 1.java.util.Random java.util.Random类用于生成伪随机数。 // 使用无参构造方法创建Random对象Random rand new Random();// 生成一个[0, 100)范围内的随机整数int randomInt rand.nextInt(100);Sys…

linux使用命令行编译qt.cpp

步骤&#xff1a; mkdir qttestcd qttestvim hello.cpp #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc,char* argv[]) {QApplication a(argc,argv);QLabel label("aaa");label.resize(100,100);label.show()…

vulnhub(6):Tr0ll(隐藏目录、hydra密码爆破、内核漏洞提权)

端口 nmap主机发现 nmap -sn 192.168.178.0/24 ​ Nmap scan report for 192.168.178.33 Host is up (0.00020s latency). ​ 33是新出现的机器&#xff0c;他就是靶机 nmap端口扫描 nmap -Pn 192.168.178.33 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nmap/sca…

【FATFS】FATFS简介及下载

1、FATFS简介 FatFs 是一个针对嵌入式系统开发的通用文件系统模块&#xff0c;主要用于支持 FAT 文件系统。它最初由 ChaN 开发&#xff0c;并被广泛应用于嵌入式设备上。FatFs 以其轻量级、可配置和设备无关的特性著称&#xff0c;支持 FAT12、FAT16、FAT32 以及 exFAT 文件系…

【iOS】单例模式

目录 前言单例模式认识单例模式单例模式的特点及使用情景单例模式的使用单例模式的实现步骤&#xff1a;完整代码 总结 前言 在进行大项目编写之前&#xff0c;开始对前面比较重要的知识进行回顾和重新学习&#xff0c;单例模式在软件开发设计中是比较重要的&#xff0c;尤其是…

EFI引导模式下配置Windows和Linux双系统共存

这几天在VirtualBox虚机里玩Modular MAX下的LLama3大模型&#xff0c;实在受不了这执行速度&#xff0c;于是下决心把Ubuntu系统安装在硬盘上跟Windows11做双系统共存。之前在传统BIOS引导模式下做过不少次双系统引导&#xff0c;EFI模式下第一次做&#xff0c;加之windows系统…

计算机毕业设计 大学志愿填报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

大数据-129 - Flink CEP 详解 Complex Event Processing - 复杂事件处理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

91、K8s之ingress上集

一、Ingress service模式&#xff1a; loadbalance NodePort&#xff1a;每个节点都会有一个指定的端口 30000-32767 内网 clusterip&#xff1a;默认模式&#xff0c;只能pod内部访问 externalName&#xff1a;需要dns提供域名 1.1、对外提供服务的ingress service&…

线性规划------ + 案例 + Python源码求解(见文中)

目录 一、代数模型&#xff08;Algebraic Models&#xff09;详解1.1什么是代数模型&#xff1f;1.2代数模型的基本形式1.3 安装所需要的Python包--运行下述案例1.4代数模型的应用案例案例 1&#xff1a;市场供需平衡模型Python求解代码Python求解结果如下图&#xff1a; 案例 …

【快速解决】搭建VUE+VScode+elementUI开发环境,Vue环境配置

目录 1、通过这个之间下载node.js&#xff08;全选next即可&#xff09; 2、winr检验是否安装成功&#xff08;运行下面两个命令即可&#xff09; 3、将下面我给你的这个压缩包解压&#xff0c;然后放到空间足够的磁盘里面 4、【重点】设置环境变量 第一个变量路径里面长这…

ubuntu中QT+opencv在QLable上显示摄像头

ubuntu中QTopencv在QLable上显示摄像头 饭前的一篇文章吧&#xff0c;写完吃饭走 图像在机器视觉中的重要性是不可忽视的。机器视觉是指计算机利用图像处理技术进行图像识别、分析和理解的科学与技术领域。图像是机器视觉的输入数据&#xff0c;通过分析和处理图像&#xff0…

HTML中的文字与分区标记

1.font标记&#xff1a;用来设置文字的字体&#xff0c;大小&#xff0c;颜色&#xff0c;等属性 <!--font:font标记用来设置字体大小颜色属性size:设置字号&#xff0c;默认是3号&#xff0c;1表示4号&#xff0c;-1表示2号&#xff0c;取值范围是[1,7]或[-7,-1]color:设置…

Docker零基础入门

参考课程https://www.bilibili.com/video/BV1VC4y177re/?vd_source=b15169a302bee35f484245aecc69d4dd 参考书籍Docker 实践 - 面向 AI 开发人员的 Docker 实践 (dockerpractice.readthedocs.io) 1. 什么是Docker 1.1. Docker起源 随着计算机的发展,计算机上已经可以运行多…

C++ | Leetcode C++题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) …

第108集《大佛顶首楞严经》

请打开讲义241面。我们讲到嗅报&#xff0c;鼻根当中嗅的功能。 本根发相 发明二相&#xff1a;一者通闻&#xff0c;被诸恶气&#xff0c;熏极心扰。二者塞闻&#xff0c;气掩不通&#xff0c;闷绝于地。 以鼻根造业到无间地狱以后&#xff0c;他有二种受苦的相状&#xf…

[C++] 剖析多态的原理及实现

文章目录 多态的概念及定义编译时多态&#xff08;静态多态&#xff09;运行时多态&#xff08;动态多态&#xff09;动态多态的原理示例&#xff1a;运行时多态 两种多态的区别 多态的实现基本条件虚函数虚函数的重写与覆盖虚函数重写的其他问题协变析构函数的重写 C11 中的 o…

引领智能家居新风尚,WTN6040F门铃解决方案——让家的呼唤更动听

在追求高效与便捷的智能家居时代&#xff0c;每一个细节都承载着我们对美好生活的向往。WTN6040F&#xff0c;作为一款专为现代家庭设计的低成本、高性能门铃解决方案&#xff0c;正以其独特的魅力&#xff0c;悄然改变着我们的居家生活体验。 芯片功能特点&#xff1a; 1.2.4…