pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)

pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第1张图片

一、设置鼠标形状
pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第2张图片
通过向setCursor()方法传递不同的枚举值,控制鼠标在其控件内的形状:
在这里插入图片描述
pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第3张图片
各个枚举值的效果:
pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第4张图片
pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第5张图片

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_())

pyqt5-weidget-鼠标操作(鼠标形状、鼠标跟踪,QCursor)_第6张图片

你可能感兴趣的:(qt,python,pyqt5)