python之pyqt专栏9-鼠标事件

目录

需求

UI界面

代码实现

代码解析:

Label初始化设置

重写鼠标按下事件

重写鼠标释放事件

重写鼠标移动事件

运行结果


需求

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

UI界面

创建一个QWidget窗口

代码实现

python 复制代码
# 导入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初始化设置
python 复制代码
self.label = QLabel(self)
self.label.setText("x = 0, y = 0            ")
self.label.hide()

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

python 复制代码
self.label = QLabel(self)

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

python 复制代码
self.label.setText("x = 0, y = 0            ")

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

python 复制代码
self.label.hide()
重写鼠标按下事件
python 复制代码
    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是枚举,里面定义了鼠标按键编号

python 复制代码
if(a0.button() == Qt.MouseButton.LeftButton):

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

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

python 复制代码
 self.label.move(a0.pos())

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

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

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

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

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

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

运行结果

鼠标事件

相关推荐
深蓝海拓2 天前
PySide6,图形按钮使用系统内置图标
笔记·python·学习·pyqt
懷淰メ3 天前
【AI加持】基于PyQt+YOLO+DeepSeek的钢材焊接缺陷检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·缺陷检测·deepseek·钢材缺陷
爱码小白5 天前
排除LhPyQt5疑难bug的经验
python·pyqt
懷淰メ7 天前
【AI加持】基于PyQt+YOLO+DeepSeek的安全帽检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·安全帽检测·deepseek·安全帽
懷淰メ7 天前
【AI加持】基于PyQt+YOLO+DeepSeek的PCB缺陷检测系统(详细介绍)
yolo·计算机视觉·pyqt·缺陷检测·pcb·检测系统·pcb缺陷
懷淰メ7 天前
【AI加持】基于PyQt+YOLO+DeepSeek的布匹缺陷检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·缺陷检测·布匹·布匹缺陷
深蓝海拓8 天前
基于QtPy (PySide6) 的PLC-HMI工程项目(十二)最后的工作
网络·笔记·python·学习·pyqt·plc
TOOLS指南9 天前
Python-PyQt界面开发入门-计算器例子
pyqt
小灰灰搞电子9 天前
PyQt QDarkStyle详解-打造专业暗黑界面的瑞士军刀
pyqt·暗黑主题
懷淰メ10 天前
【AI加持】基于PyQt+YOLO+DeepSeek的车型检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·项目设计·deepseek·车型检测