鼠标操作
- 设置鼠标形状
控件.setCursor('枚举类型参数') # 根据枚举类型设置该控件内鼠标显示的图标样式
- 鼠标样式展示
API 样图 window.setCursor(Qt.ArrowCursor) window.setCursor(Qt.UpArrowCursor) window.setCursor(Qt.CrossCursor) window.setCursor(Qt.IBeamCursor) window.setCursor(Qt.WaitCursor) window.setCursor(Qt.BusyCursor) window.setCursor(Qt.ForbiddenCursor) window.setCursor(Qt.PointingHandCurso window.setCursor(Qt.WhatsThisCursor) window.setCursor(Qt.SizeVerCursor) window.setCursor(Qt.SizeHorCursor) window.setCursor(Qt.SizeBDiagCursor) window.setCursor(Qt.SizeAllCursor) window.setCursor(Qt.SplitVCursor) window.setCursor(Qt.SplitHCursor) window.setCursor(Qt.OpenHandCursor) window.setCursor(Qt.ClosedHandCursor) window.setCursor(Qt.BlankCursor) - 自定义鼠标样式_QCursor对象
- 通过创建QCursor对象来设置自定义鼠标样式
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle("自定义鼠标样式") # 创建QPixmap对象,并设置显示的图片 pixmap = QPixmap("2.png") # 设置对象宽和高按比例缩小,返回一个新对象 new_pixmap = pixmap.scaled(20, 20) # 创建QCursor对象(鼠标对象),用作setCursor参数 # 设置该对象的作用点为图片的左上角(0,0),默认是图片中心点 cursor = QCursor(new_pixmap, 0, 0) # 设置window控件的鼠标样式为自定义的QCursor对象:cursor window.setCursor(cursor) window.show() sys.exit(app.exec_())
-
- 重置鼠标样式
控件.unsetCursor()
- 如果之前设置了鼠标的样式,通过
unsetCursor()
方法还原鼠标样式为默认样式from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle("自定义鼠标样式") # 创建QPixmap对象,并设置显示的图片 pixmap = QPixmap("2.png") # 设置对象宽和高按比例缩小,返回一个新对象 new_pixmap = pixmap.scaled(20, 20) # 创建QCursor对象(鼠标对象),用作setCursor参数 # 设置该对象的作用点为图片的左上角(0,0) cursor = QCursor(new_pixmap, 0, 0) window.setCursor(cursor) # 鼠标样式重置:还原鼠标样式为默认样式 window.unsetCursor() window.show() sys.exit(app.exec_())
- 获取鼠标对象
控件.cursor() # 返回一个QCursor对象
- 获取到鼠标对象之后,就可以进一步的获取到鼠标对象的一系列东西
- 获取鼠标样式图片
QCursor对象.pixmap()
- 获取鼠标相对于桌面的位置(x, y)
QCursor对象.pos()
- 设置鼠标默认出现位置,相对于桌面(x, y)
QCursor对象.setPos(x, y)
- 鼠标跟踪
- 概念
- 所谓的鼠标跟踪,其实就是设置检测鼠标移动事件的条件
- 不跟踪:鼠标移动时,必须处于按下状态,才会触发mouseMoveEvent事件
- 跟踪:鼠标移动时,不处于按下状态,也会触发mouseMoveEvent事件
- 设置鼠标是否跟踪API
控件.setMouseTracking(bool)
- 获取鼠标是否跟踪
控件.hasMouseTracking() # 返回True 或者 False
- mouseMoveEvent事件会传递一个QMouseEvent对象,通过这个对象可以获取到相应的一些属性
QMouseEvent.button # 返回产生事件的按钮 # 需要注意的是,对于鼠标移动事件,该函数返回值总是Qt.NoButton QMouseEvent.buttons # 返回产生事件的按钮状态 # 函数返回当前按下的所有按钮,按钮状态可以是 Qt.LeftButton 左键 Qt.RightButton 右键 Qt.MidButton 中键 或运算组合 多键同时按下 QMouseEvent.flags QMouseEvent.globalX() # 获取该对象的全局X轴位置,相对于桌面而言 QMouseEvent.globalY() # 获取该对象的全局Y轴位置,相对于桌面而言 QMouseEvent.globalPos() # 获取该对象的全局位置(x, y),相对于桌面而言 QMouseEvent.screenPos() # 获取该对象的全局位置(x.0, y.0),相对于桌面而言 QMouseEvent.x() # 获取该对象的局部X轴位置,相对于父对象而言 QMouseEvent.y() # 获取该对象的局部y轴位置,相对于父对象而言 QMouseEvent.pos() # 获取该对象的局部位置(x, y),相对于父对象而言 QMouseEvent.localPos() # 获取该对象的局部位置(x.0, y.0),相对于父对象而言
-
- 示例
from PyQt5.Qt import * import sys class MyWidget(QWidget): def mouseMoveEvent(self, ms): print('鼠标移动了', ms.globalPos()) # print('鼠标移动了', ms.localPos()) # print('鼠标移动了', ms.globalX(),ms.globalY()) # print('鼠标移动了', ms.pos()) # print('鼠标移动了', ms.screenPos()) app = QApplication(sys.argv) window = MyWidget() window.resize(500, 500) window.setWindowTitle("鼠标跟踪") # 设置鼠标跟踪开启 window.setMouseTracking(True) window.show() sys.exit(app.exec_())
- 鼠标跟踪案例
- 创建一个窗口,内部有一个label控件
- 鼠标移入窗口时,让label位置跟随随表位置
- 让鼠标设置为指定图标
- 代码演示
from PyQt5.Qt import * import sys class MyWidget(QWidget): def mouseMoveEvent(self, ms) -> None: # 获取指定类型,指定对象名称的子控件 label = self.findChild(QLabel, 'label2') # 设置label的位置方法一 # ms_pos = ms.pos() # label.move(ms_pos) ms_pos = ms.localPos() label.move(int(ms_pos.x()), int(ms_pos.y())) app = QApplication(sys.argv) window = MyWidget() window.resize(500, 500) window.setWindowTitle("鼠标跟踪案例") # 设置鼠标样式为指定图片 pixmap = QPixmap('2.png') new_pixmap = pixmap.scaled(20, 20) cursor = QCursor(new_pixmap, 0, 0) window.setCursor(cursor) # 窗口添加label标签控件 label1 = QLabel(window) label1.setObjectName('label1') label1.setText('鼠标跟踪案例1') label1.move(100, 100) label1.setStyleSheet("background-color:cyan;") label2 = QLabel(window) label2.setObjectName('label2') label2.setText('鼠标跟踪案例2') label2.move(200, 200) label2.setStyleSheet("background-color:red;") # 设置窗口开启鼠标跟踪 window.setMouseTracking(True) window.show() sys.exit(app.exec_())