设置鼠标样式
- 用法
控件.setCursor(鼠标样式枚举量)
- 定义
class QCursor(__sip.simplewrapper):
"""
QCursor()
QCursor(QBitmap, QBitmap, hotX: int = -1, hotY: int = -1)
QCursor(QPixmap, hotX: int = -1, hotY: int = -1)
QCursor(Union[QCursor, Qt.CursorShape])
QCursor(Any)
"""
...
参数:
- 光标类型,可为内置常量,也可为图片等等;
- 触发坐标,默认为 (-1 ,-1)在光标的中心
- 自定义光标代码
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("鼠标操作")
window.resize(500, 500)
window.move(400, 200)
pixmap = QPixmap("Christmas_Tree.png") # 从图片创建自定义鼠标对象
cursor = QCursor(pixmap.scaled(50, 50), 0, 0) # scaled()对鼠标对象进行缩放,并设置触发点为0,0(默认为-1,-1,在鼠标光标对象的中心)
window.setCursor(cursor)
window.show()
sys.exit(app.exec_())
获取光标位置
思路
在一控件内移动时,如果监听了鼠标位置,则移动时触发mouseMoveEvent()。而在 QMouseEvent.py 文件中有着可以返回光标位置的函数,如下:
def globalPos(self): # real signature unknown; restored from __doc__
""" globalPos(self) -> QPoint """
pass
def globalX(self): # real signature unknown; restored from __doc__
""" globalX(self) -> int """
return 0
def globalY(self): # real signature unknown; restored from __doc__
""" globalY(self) -> int """
return 0
def localPos(self): # real signature unknown; restored from __doc__
""" localPos(self) -> QPointF """
pass
def pos(self): # real signature unknown; restored from __doc__
""" pos(self) -> QPoint """
pass
通过这些函数便可获取光标当前位置,配合重写控件的 mouseMoveEvent() 方法,当光标移动到控件内时打印出光标位置:
class Window(QWidget):
def mouseMoveEvent(self, me) -> None:
print(me.localPos())
设置光标位置
- 设置是否跟踪鼠标
- 不跟踪 :鼠标移动时,必须处于按下状态,才会触发mouseMoveEvent事件
- 跟踪 :鼠标移动时,不处于按下状态,也会触发mouseMoveEvent事件
setMouseTracking(bool)
- 对于 QCursor() 光标对象,可以使用 .pos() 方法获取位置。
cursor = QCursor(pixmap.scaled(50, 50), 0, 0) # scaled()对鼠标对象进行缩放,并设置触发点为0,0(默认为-1,-1,在鼠标光标对象的中心)
window.setCursor(cursor)
print(cursor.pos())
- 通过 setPos() 方法可以设置光标位置。
cursor.setPos(0, 0)