python之pyqt专栏9-鼠标事件

      

目录

需求

UI界面

代码实现

代码解析:

Label初始化设置

重写鼠标按下事件

重写鼠标释放事件

重写鼠标移动事件

运行结果


需求

        当鼠标进入窗口时,点击鼠标左键,出现一个label并在显示光标在窗口的坐标;按住左键不释放拖动鼠标,label的坐标信息跟着光标位置变化,当左键被释放时,label消失不见。

UI界面

                创建一个QWidget窗口

                

代码实现


# 导入sys模块
import sysfrom PyQt6.QtCore import Qt
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget,QLabel# untitled模块中导入Ui_Form类
from untitled import Ui_Formclass MyMainForm(QWidget, Ui_Form):def __init__(self, parent=None):# 调用父类的构造函数super(MyMainForm, self).__init__(parent)# 调用继承Ui_Form过来的setupUi函数self.setupUi(self)self.label = QLabel(self)self.label.setText("x = 0, y = 0            ")self.label.hide()def mouseMoveEvent(self, a0):self.label.move(a0.pos())self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")def mousePressEvent(self, a0):if(a0.button() == Qt.MouseButton.LeftButton):self.label.show()self.label.move(a0.pos())self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")def mouseReleaseEvent(self, a0):if (a0.button() == Qt.MouseButton.LeftButton):self.label.hide()# Press the green button in the gutter to run the script.
if __name__ == '__main__':# 实例化应用app = QApplication(sys.argv)# 实例化MyMainFormmyw = MyMainForm()myw.show()# 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。sys.exit(app.exec())

 如果要在自己的部件上实现鼠标事件,可以根据需要在部件类对下面几种方法进行重写:

                mousePressEvent(),鼠标按下事件

                mouseReleaseEvent(),鼠标释放事件

                mouseDoubleClickEvent(),鼠标双击事件

                mouseMoveEvent(),鼠标移动事件

      在个需求中,需要用到mousePressEvent(),mouseReleaseEvent(),mouseMoveEvent()事件,因此对他们进行重写。

        此外,可以在QWidget的方法中找到它们

 

 

代码解析:

Label初始化设置
self.label = QLabel(self)
self.label.setText("x = 0, y = 0            ")
self.label.hide()

         1:在类的构造函数,添加一个label标签,并设置它的父对象是当前窗口

self.label = QLabel(self)

        2:设置Label文本内容,"y =0 "后面有很多空格,目的是为了占位,不然当坐标值变大会显示不全 

self.label.setText("x = 0, y = 0            ")

        3.隐藏标签,根据需求点击的时候才能出现。

self.label.hide()
重写鼠标按下事件
    def mousePressEvent(self, a0):if(a0.button() == Qt.MouseButton.LeftButton):self.label.show()self.label.move(a0.pos())self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")

         1.a0是事件对象,通过button()可以获取被按下的按键,而Qt.MouseButton是枚举,里面定义了鼠标按键编号

       

if(a0.button() == Qt.MouseButton.LeftButton):

 

        注:如果是鼠标多个按键同时被按下,可以调用通过buttons(),button只是返回一个按键 

        

        2.a0事件对象,通过调用pos获取,相对于当前窗口的位置。移动label到当前鼠标的位置

 self.label.move(a0.pos())

         3.将坐标信息设置为label的文本信息

self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")
重写鼠标释放事件

        当鼠标左键被释放时,隐藏label

    def mouseReleaseEvent(self, a0):if (a0.button() == Qt.MouseButton.LeftButton):self.label.hide()
重写鼠标移动事件

     获取鼠标位置,移动label到当前鼠标的位置;坐标信息设置为label的文本信息

    def mouseMoveEvent(self, a0):self.label.move(a0.pos())self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")

运行结果

鼠标事件

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AntDB“超融合+流式实时数仓”——打造分布式数据库新纪元

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&a…

网络基础--win10双网卡设置成访问不同的网络

1、背景 我日常中大部分时间都是使用外网的网卡进行办公,只有在连接公司服务器时才需要使用内网。由于我的电脑存在两张网卡,分别用于连接不同的网络(常见情况是一张访问公司内网,一张访问公司外网),但是在…

Small Data Transmission(一) overview

在R16之前,RRC Inactive 不支持数据传输,UE在RRC inactive状态有data要传输时,就要通过RRC resume过程,转换到RRC connected mode才能进行数据传输。 有时候UE要传输的数据包可能会很小,且发送频率也很低,如果每次发送数据都要进行上述过程,就会增加不必要的功耗和信令…

力扣日记11.28-【二叉树篇】二叉树的最小深度

力扣日记:【二叉树篇】二叉树的最小深度 日期:2023.11.28 参考:代码随想录、力扣 111. 二叉树的最小深度 题目描述 难度:简单 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点…

TDA4VM EVM开发板调试笔记

文章目录 1. 前言2. 官网资料导读3. 安装 Linux SDK4. 制作SD 启动卡5. 验证启动1. 前言 TDA4作为一般经典的车规级SOC芯片,基于它的低阶智驾方案目前成为各家智驾方案公司的量产首选,这也使得基于TDA4的开发需求陡增,开发和使用TDA4既要熟悉Linux驱应用开发,还要熟悉传统…

《opencv实用探索·五》opencv小白也能看懂的图像腐蚀

1、图像腐蚀原理简单理解: 腐蚀是形态学最基本的操作,都是针对白色部分(高亮部分)而言的。即原图像中高亮部分被蚕食,得到比原图更小的区域。 2、图像腐蚀的作用: (1)去掉毛刺&…

如何安装鸿蒙Harmony 4.0低版API9三方库

比如我要用下拉刷新三方库pulltorefresh 安装命令如下 ohpm install ohos/pulltorefresh 安装完后然后运行Demo报错,说没有isAtEnd方法 然后查看pulltorefresh 最新版2.0.4对应Harmony API10,然而我的手机是API9,所以必须找到API9的库,然后查看2.0.1是还是API9 所…

测试与管理 Quota

用myquota1创建一个大的文件测试 理论猜想:超过soft可以,但是超过hard就不行了,最大值就是hard,如果超过soft,过了17天不处理,最后限制值会被强制设置成soft。修改设置成hard值 切换测试用户,m…

对话汪源:数智时代为企业构建新的竞争力,和网易数帆的“为与不为”

CodeWave在内的诸多“主演”正在重新演绎网易数帆,在网易数帆的新故事里,做专业、底层、核心的工具,是其成长至今最核心的底色。 作者|斗斗 编辑|皮爷 出品|产业家 “我希望在中间层能构建一个好的生态。”网易汪源的这句话,让…

如何使用Qchan搭建更好保护个人隐私的本地图床并在公网可访问

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…

如何让你的 Jmeter+Ant 测试报告更具吸引力?

引言 想象一下,你辛苦搭建了一个复杂的网站,投入了大量的时间和精力进行开发和测试。当你终于完成了测试并准备生成测试报告时,你可能会发现这个过程相当乏味,而对于其他人来说,它可能也不那么吸引人。 但是&#xf…

大语言模型新升级:亚马逊云科技2023芯片创新日

在这个充满活力的2023年芯片创新日,Amazon EC2 的副总裁 Dave Brown 与观众分享了他与 EC2 的15年漫长旅程。他的眼中闪烁着对技术的热情,他描述了自己如何与一个才华横溢的团队合作,在这大语言模型与生成式AI的元年中致力于为客户提供最佳的…

ELK+filebeat+kafka

无需创建logstash的端口,直接创建topic 远程收集mysql和httpd的日志 (一)安装nginx和mysql服务 1、打开mysql的日志功能 2、创建日志(创库、创表、添加数据) (1)mysql服务器上安装http system…

医疗机构临床数据合规共享解决方案斩获“金智奖”年度优秀方案奖

11月24日,以“并肩聚力,协同创新,共谋网络安全产业新发展”为主题的2022—2023年度中国网络安全与信息产业“金智奖”(以下简称:“金智奖”)颁奖盛典隆重举行。美创科技—医疗机构临床数据合规共享解决方案…

synchronized 关键字

目录 1 synchronized 的特性 1)互斥 2) 刷新内存(内存可见性) 3) 可重入 2 synchronized 使用示例 1) 直接修饰普通方法: 2) 修饰静态方法: 3) 修饰代码块: .3 Java 标准库中的线程安全类 1 synchronized 的特性 1&#x…

Java数据结构之《链式线性表的插入与删除》问题

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等偏下的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我…

【开源】基于Vue+SpringBoot的智能教学资源库系统

项目编号: S 050 ,文末获取源码。 \color{red}{项目编号:S050,文末获取源码。} 项目编号:S050,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…

Android中添加C或C++代码

1、创建cpp目录,用于存放C和C代码。 2、创建CMake构建脚本CMakeLists.txt文件,将其放在cpp目录中。 # Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.22.1)# Declares and names the pro…

AI模型训练——入门篇(二)

导语:本文主要介绍了基于BERT的文本分类方法,通过使用huggingface的transformers库实现自定义模型和任务。具体步骤包括:使用load_dataset函数加载数据集,并应用自定义的分词器;使用map函数将自定义分词器应用于数据集…

Linux:进程状态

目录 1.Linux内核关于进程状态的源代码 2. 运行状态 3. 阻塞状态 4. 挂起 5.Linux中的进程状态 5.1 睡眠状态 5.2 暂停状态 5.3 僵尸进程与孤儿进程 我们在学习进程状态时,老师只是简单的让我们记住下面这张图 1.教材中进程操作系统的进程状态 那么这些…