python之pyqt专栏9-鼠标事件

      

目录

需求

UI界面

代码实现

代码解析:

Label初始化设置

重写鼠标按下事件

重写鼠标释放事件

重写鼠标移动事件

运行结果


需求

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

UI界面

                创建一个QWidget窗口

                

代码实现


# 导入sys模块
import sys

from PyQt6.QtCore import Qt
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget,QLabel

# untitled模块中导入Ui_Form类
from untitled import Ui_Form


class 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)
    # 实例化MyMainForm
    myw = 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()}")

运行结果

鼠标事件

 

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

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

相关文章

Java学习day15:Object类、set集合(知识点+例题详解)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) 往期回顾 Java学习day14:权限…

软件系统安全漏洞检测应该怎么做?靠谱的软件安全检测公司推荐

软件系统安全漏洞检测是指通过对软件系统进行全面的、系统化的评估,发现和解决其中可能存在的安全漏洞和隐患。这些安全漏洞可能会被不法分子利用,引发数据泄露、系统瘫痪、信息被篡改等安全问题,给企业造成严重的经济和声誉损失。那么软件系…

jenkins 使用 nexus插件,将代码打包好推送到制品库

Nexus是一个开源的、基于Java的应用程序框架和存储库管理系统,可用于管理软件开发和部署的所有相关构件。 它允许用户创建和维护Maven存储库,使其更易于组织,搜索和共享构建工件和库。 Nexus具有安全性和身份验证、多格式支持、镜像管理和自定…

精彩回顾|迪捷软件先进装备软件技术研讨会之行圆满收官

2023年11月24日,为期3个月的先进装备软件高安全、高可靠、智能化验证技术系列研讨会在成都圆满收官。迪捷软件董事长康烁作为研讨会特邀专家,在西安、上海、成都站进行了演讲分享。 以航空航天、船舶、电力电子、汽车、医疗为代表的先进装备软件发展迅速…

ELK+filebeat+kafka

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

Jenkins持续集成Python项目

一、前言   之前学习了很多自动化测试框架,但是写的脚本都是本地执行,多数用来造数据。最近公司掀起一股自动化测试的风,所以就想研究下如何集成jenkins,本次采用pytest,用的是阿里云服务器centos7。 二、服务器环境…

功能测试常见的测试方法及其使用实例说明

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

软文推广如何自然融入品牌?媒介盒子有妙招

软文推广作为一种柔性推广方式,能将品牌信息融入到用户日常浏览的内容中,让用户不知不觉接触品牌,从而产生好感,这种方式既可以避免广告带来的反感,又可以提高广告的有效性。那么在推广中应该如何自然融入品牌信息呢&a…

一文看懂:库存分析如何做?

在之前的文章中,老李给大家简单介绍了制造业数据分析用到的指标体系和典型分析场景。如果你读过那篇文章,你就会知道制造业主要有两个典型的分析场景,一是库存管理,二是生产管理。虽然老李在之前的文章中提到了这两个场景&#xf…

Cesium.CustomShader颜色值显示错误

官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…

IPv6+2.0网络切片技术在电子政务网的应用实践详解

IPv6是面向5G、云网/算网融合的智能IP技术,具有包含可编程路径、快速业务发放、自动化运维、质量可视化、SLA保障和应用感知等特点。IPv6将万物互联提升到了万物智联,赋能百行百业高质量数字化转型。 图示:“IPv6”技术创新体系发展的三个阶段…

机器学习模型验证——以数据为中心的方法

构建机器学习模型时,人们往往将激情和精力集中于收集数据和训练模型,对测试模型和验证结果往往缺少应有的关注。正确的验证技术有助于估计无偏见的广义模型的性能,并更好地理解模型训练的效果。您需要确保机器学习模型经过准确的训练&#xf…

骨传导与入耳式耳机哪种音质好?骨传导与入耳式耳机有什么区别?

由于骨传导耳机和入耳式耳机的传声原理不同,入耳式耳机的音质要更好一些! 想要了解骨传导耳机和入耳式耳机哪种音质好,首先就要了解骨传导耳机和入耳式耳机的传声原理有什么区别? 一、骨传导耳机和入耳式耳机有什么区别 1、传声…

智慧垃圾分拣站:科技改变城市环境,创造更美好的未来

随着城市化进程的不断加快,垃圾处理问题日益凸显。为了更好地解决垃圾分类问题,越来越多的城市开始推广智慧垃圾分拣站,利用创新科技实现高效垃圾分类处理。 山海鲸使用三维建模技术,建立了一个智慧垃圾分拣站数字孪生模型&#x…

PHP在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

自己的邮箱名称出现在别人的此电脑的网络位置中

在公司别的同事告诉我,我的邮箱名字出现在他们的【此电脑】-【网络位置中】 如图: 当时吓我一跳,因为我总喜欢搞一些渗透的东西,我以为把自己暴漏了,然后疯狂的在网上找原因。 于是就搜到一位安暖的博主: …

发生这种情况 经常导致投资者的痛苦

在这个市场中,什么事会让人痛苦呢?有的投资者马上回答,因为亏损。说实话,如果经过刻意的练习,我们在一定程度上能克服亏损给人带来的痛感。但是有另一种情况也容易为投资者带来痛苦,下面我们就来讨论一下。…

单片机学习12——电容

电容的作用: 1)降压作用: 容抗: Xc 1/2fc 串联分压原理。2100Ω的容量,50Hz的频率,可以得到1.5uF。断电之后,需要串联一个1MΩ的电阻放电。 那是不是可以使用2100欧姆的电阻来代替电容呢&am…

Java高级技术(反射的作用与应用场景)

一,放射 二,案例 (1),题目 (2),反射类 (3),测试类

民安智库(第三方公众满意度调查):专业助力咖啡店客户满意度调查

近期,一家知名的咖啡店品牌面临着市场竞争加剧和服务质量提升的挑战。为了更好地了解客户需求和提升客户满意度,该咖啡店决定委托民安智库(第三方满意度测评)开展一次全面的客户满意度调查。 本次调查旨在了解客户对咖啡店服务的…