当前位置:   article > 正文

python之pyqt专栏9-鼠标事件_pyqt6 mousepressevent

pyqt6 mousepressevent

      

目录

需求

UI界面

代码实现

代码解析:

Label初始化设置

重写鼠标按下事件

重写鼠标释放事件

重写鼠标移动事件

运行结果


需求

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

UI界面

                创建一个QWidget窗口

                

代码实现

  1. # 导入sys模块
  2. import sys
  3. from PyQt6.QtCore import Qt
  4. # PyQt6.QtWidgets模块中导入QApplication, QWidget
  5. from PyQt6.QtWidgets import QApplication, QWidget,QLabel
  6. # untitled模块中导入Ui_Form类
  7. from untitled import Ui_Form
  8. class MyMainForm(QWidget, Ui_Form):
  9. def __init__(self, parent=None):
  10. # 调用父类的构造函数
  11. super(MyMainForm, self).__init__(parent)
  12. # 调用继承Ui_Form过来的setupUi函数
  13. self.setupUi(self)
  14. self.label = QLabel(self)
  15. self.label.setText("x = 0, y = 0 ")
  16. self.label.hide()
  17. def mouseMoveEvent(self, a0):
  18. self.label.move(a0.pos())
  19. self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")
  20. def mousePressEvent(self, a0):
  21. if(a0.button() == Qt.MouseButton.LeftButton):
  22. self.label.show()
  23. self.label.move(a0.pos())
  24. self.label.setText(f"x = {a0.pos().x()} , y = {a0.pos().y()}")
  25. def mouseReleaseEvent(self, a0):
  26. if (a0.button() == Qt.MouseButton.LeftButton):
  27. self.label.hide()
  28. # Press the green button in the gutter to run the script.
  29. if __name__ == '__main__':
  30. # 实例化应用
  31. app = QApplication(sys.argv)
  32. # 实例化MyMainForm
  33. myw = MyMainForm()
  34. myw.show()
  35. # 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。
  36. sys.exit(app.exec())

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

                mousePressEvent(),鼠标按下事件

                mouseReleaseEvent(),鼠标释放事件

                mouseDoubleClickEvent(),鼠标双击事件

                mouseMoveEvent(),鼠标移动事件

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

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

 

 

代码解析:

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

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

self.label = QLabel(self)

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

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

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

self.label.hide()
重写鼠标按下事件
  1. def mousePressEvent(self, a0):
  2. if(a0.button() == Qt.MouseButton.LeftButton):
  3. self.label.show()
  4. self.label.move(a0.pos())
  5. 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

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

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

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

运行结果

鼠标事件

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/897375
推荐阅读
相关标签
  

闽ICP备14008679号