鼠标操作
控件.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) |
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()
QCursor对象.pos()
QCursor对象.setPos(x, y)
控件.setMouseTracking(bool)
控件.hasMouseTracking()
# 返回True 或者 False
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_())
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_())