当前位置:   article > 正文

pyqt5 鼠标操作_pyqt5 qcursor setpos

pyqt5 qcursor setpos
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QLabel
  3. from PyQt5.QtGui import QCursor
  4. from PyQt5.QtCore import Qt
  5. class Demo(QWidget):
  6. def __init__(self):
  7. super(Demo, self).__init__()
  8. self.label = QLabel('Hello World', self)
  9. self.label1 = QLabel('喂 世界', self)
  10. self.label1.move(0, 30)
  11. self.label2 = QLabel('鼠标位置', self)
  12. self.resize(500, 300)
  13. self.label.resize(200, 20)
  14. self.label1.resize(200, 20)
  15. self.label2.resize(400, 20)
  16. self.label2.move(0, 60)
  17. self.label3 = QLabel('鼠标位置', self)
  18. self.label3.resize(400, 20)
  19. self.label3.move(0, 90)
  20. self.setMouseTracking(True) # 设置鼠标移动跟踪是否有效
  21. '''
  22. 设置为True时,只要鼠标在窗口内移动时mouseMoveEvent事件就能捕获
  23. 设置为False时(默认),只有鼠标键按下并在窗口内移动时mouseMoveEvent事件才能捕获
  24. 注意只能是QWidget,如果是QMainwindow,则无效
  25. self.hasMouseTracking()返回设置的状态
  26. '''
  27. def mousePressEvent(self, event): # 鼠标键按下时调用(任意一个键,按一下调一次),这些方法是许多控件自带的,这里来自于QWidget。
  28. self.label.setText('鼠标键按下了')
  29. n = event.button() # 用来判断是哪个鼠标健触发了事件【返回值:0 1 2 4】
  30. '''
  31. QtCore.Qt.NoButton - 0 - 没有按下鼠标键
  32. QtCore.Qt.LeftButton -1 -按下鼠标左键
  33. QtCore.Qt.RightButton -2 -按下鼠标右键
  34. QtCore.Qt.Mion 或 QtCore.Qt.MiddleButton -4 -按下鼠标中键
  35. '''
  36. nn = event.buttons() # 返回前面所列枚举值的组合,用于判断同时按下了哪些键【不知怎么判断】 <PyQt5.QtCore.Qt.MouseButtons object at 0x0000003326982F98>
  37. def mouseReleaseEvent(self, event): #鼠标键释放时调用
  38.       #参数1:鼠标的作用对象;参数2:鼠标事件对象,用来保存鼠标数据
  39. self.label.setText('鼠标键放开了')
  40. def mouseMoveEvent(self, event): # 鼠标移动事件
  41. ret = self.hasMouseTracking() #返回鼠标MouseTracking的状态
  42.      self.label1.setText('鼠标移动了:%s' % ret)
  43. x = event.x() # 返回鼠标相对于窗口的x轴坐标
  44. y = event.y() # 返回鼠标相对于窗口的y轴坐标
  45.      self.label2.setText('鼠标x坐标:%s ,鼠标y坐标:%s' % (x, y))
  46. xy = event.pos() #返回鼠标坐标 ,QPoint(463, 0) 相对于控件 【用xy.x() xy.y()提取值】
  47. s=event.localPos() #返回鼠标坐标 相对于控件 QPointF(2.0, 2.0)
  48. s = self.mapToGlobal(xy) # 将窗口坐标转换成屏幕坐标.属于QWidget类的方法;参数类型QPoint
  49. self.label3.setText('鼠标x坐标:%s ,鼠标y坐标:%s' % (xy.x(), xy.y()))
  50. xy1 = event.globalPos() # 返回鼠标相对于屏幕的坐标。PyQt5.QtCore.QPoint(1096, 37)【用xy1.x() xy1.y()提取值】
  51. s1 = self.mapFromGlobal(xy1) #将屏幕坐标转换成窗口坐标.属于QWidget类的方法;参数类型QPoint
  52. # mapToParent(QPoint) - 将窗口坐标转换成父窗口坐标。如果没有父窗口,则相当于mapToGlobal (QPoint)
  53. # mapFromParent(QPoint) - 将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
  54. # mapTo (QWidget, QPoint) - 将窗口坐标转换成 QWidget父窗口坐标
  55. px = event.globalX() # 返回相对于屏幕的x坐标
  56. py = event.globalY() # 返回相对于屏幕的y坐标
  57. s = event.windowPos() # 相对于窗口的坐标(保留一位小数),PyQt5.QtCore.QPointF(481.0, 1.0)【用s.x() s.y()提取值】
  58. p = event.screenPos() # 相对于屏幕的坐标(保留一位小数).PyQt5.QtCore.QPointF(476.0, 49.0)【用p.x() p.y()提取值】
  59. t = event.timestamp() # 返回事件发生的时间。【以程序运行开始计时,以毫秒为单位】
  60. def mouseDoubleClickEvent(self, event): # 鼠标双击时调用
  61. self.label1.setText('双击了鼠标')
  62. '''双击时的事件顺序如下:
  63. MouseButtonPress
  64. MouseButtonRelease
  65. MouseButtonDblClick
  66. MouseButtonPress
  67. MouseButtonRelease
  68. QApplicaption类的setDoubleClickInterval( )方法可设置双击的时间间隔;doubleClickInterval( )方法返回双击的时间间隔。'''
  69. def enterEvent(self, event): # 鼠标移进时调用
  70. print('鼠标移进窗口了')
  71. self.setCursor(Qt.CrossCursor) # 设置鼠标形状。
  72.       #需要from PyQt5.QtGui import QCursor,from PyQt5.QtCore import Qt
  73. #鼠标形状对照图见下方
  74. # self.unsetCursor() #鼠标恢复系统默认
  75. def leaveEvent(self, event): # 鼠标移出时调用
  76. print('鼠标移出窗口了')
  77. def wheelEvent(self, event): # 滚轮滚动时调用。event是一个QWheelEvent对象
  78. angle = event.angleDelta() # 返回滚轮转过的数值,单位为1/8度.PyQt5.QtCore.QPoint(0, 120)
  79. angle = angle / 8 # 除以8之后单位为度。PyQt5.QtCore.QPoint(0, 15) 【向前滚是正数,向后滚是负数 用angle.y()取值】
  80. ang = event.pixelDelta() # 返回滚轮转过的像素值 【不知为何 没有值】
  81. # print(event.x(),event.y()) #返回鼠标相对于窗口的坐标
  82. w = event.pos() # 返回相对于控件的当前鼠标位置.PyQt5.QtCore.QPoint(260, 173)
  83. w1 = event.posF() # 返回相对于控件的当前鼠标位置.PyQt5.QtCore.QPointF(302.0, 108.0)
  84. # 坐标函数与上面相同
  85. if __name__ == '__main__':
  86. app = QApplication(sys.argv)
  87. demo = Demo()
  88. demo.show()
  89. sys.exit(app.exec())
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/887842
推荐阅读
相关标签
  

闽ICP备14008679号