一、设置鼠标形状
通过向setCursor()方法传递不同的枚举值,控制鼠标在其控件内的形状:
各个枚举值的效果:
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("自定义鼠标形状")
window.resize(100,100)
################通过setCursor()方法选择预设的鼠标样式###############
window.setCursor(Qt.BusyCursor)
################通过setCursor()方法选择预设的鼠标样式###############
window.show()
sys.exit(app.exec_())
二、通过QCursor对象自定义鼠标形状
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("自定义鼠标形状")
window.resize(100,100)
################通过setCursor()方法自定义鼠标样式###############
pixmap = QPixmap(".\over_move.png") # pixmap 是 QPixmap()的实例化,QPixmap()类用于图片的显示
new_pixmap = pixmap.scaled(30,30) # scaled方法返回自定义尺寸的副本
# cursor=QCursor(new_pixmap) # 实例化QCursor()对象,参数为QPixmap对象
cursor=QCursor(new_pixmap,0,0) # 可选参数指定图片的的哪个像素点作为鼠标的点击点
window.setCursor(cursor)
# def setCursor(self, Union, QCursor=None, Qt_CursorShape=None): # real signature unknown; restored from __doc__
# """ setCursor(self, Union[QCursor, Qt.CursorShape]) """
# pass
# 观察setCursor方法内部:1)通过枚举值选择预设的鼠标形状2)通过Qcursor类的实例化对象传递鼠标形状
################通过setCursor()方法自定义鼠标样式###############
window.show()
sys.exit(app.exec_())
三、鼠标跟踪
默认情况下,在一个控件内,只有当鼠标按键按下时才会接受鼠标事件传递的消息。
可以通过setMouseTracking(True)方法修改控件的鼠标跟踪状态使得即使没有按下鼠标也能跟踪鼠标。
利用实时获取的鼠标位置可以实现一定功能:本例中设计了键盘control键组合鼠标光标在窗口中移动标签:
from PyQt5.Qt import *
import sys
class MyWin(QWidget):
def __init__(self):
super(MyWin, self).__init__()
self.control=False
def keyPressEvent(self, event):
if (event.key() == Qt.Key_Control):
self.control=True
def keyReleaseEvent(self,event):
if (event.key() == Qt.Key_Control):
self.control = False
def mouseMoveEvent(self, event):
#重载mouseMoveEvent方法,监听鼠标移动,默认情况下只有当鼠标被点击时才会触发鼠标事件,从而被该方法监听到
print("鼠标位置 ",event.localPos().x(),event.localPos().y())
################案例#############
# label默认位置:(50, 50)
# label随鼠标指针位置改变而改变
# 利用control键组合鼠标光标控制标签移动
if self.control == True:
label.move(event.localPos().x(),event.localPos().y())
################案例#############
app=QApplication(sys.argv)
window=MyWin()
window.setWindowTitle("鼠标移动")
window.resize(100,100)
window.setMouseTracking(True) # 参数为True时,当鼠标进入window控件内便处于跟踪状态,即使不点击鼠标也会发射鼠标事件消息
# 默认情况下,鼠标处于非跟踪状态
print(window.hasMouseTracking()) # 查看鼠标跟踪状态
#################鼠标跟踪应用案例################
label=QLabel(window) # 为窗口增加一个子控件
label.setText("这是一个标签")
label.setStyleSheet("background-color:cyan;")
label.move(50,50)
#################鼠标跟踪应用案例################
window.show()
sys.exit(app.exec_())