PySide2从零开始的python界面设计5---搞定鼠标事件与鼠标样式!

捕获鼠标事件

所有widget类都含有四个鼠标事件,分别代表着双击移动,单击,释放

def mouseDoubleClickEvent(self,event):
# mouseMoveEvent 默认只捕获‘一直按下’鼠标左键的‘鼠标移动’
# 如果想让他捕获所有鼠标移动事件,需要在父子控件中都设置setMouseTracking,如下:
# self.setMouseTracking(True)
# self.label.setMouseTracking(True)
def mouseMoveEvent(self,event):
def mousePressEvent(self,event):
def mouseReleaseEvent(self,event):

只要像之前自定义控件那样重载一下这些函数就可以了

再来看看event给我们提供了哪些信息

pos = event.pos()         # 提供了以Qpoint来实现的位置信息
x,y = pos.x(),pos.y()     # 可以获取其横纵坐标
event.button()            # 返回一个·类·,用于标明是左击还是右击

有了这些,就可以写处炫酷的鼠标跟随效果了

捕获其他事件

例如窗口大小改变事件,我们只需要类似的改写resizeEvent即可,不再赘述

更改鼠标的图案:

QT的每个Widgets与Frame都提供了setCursor函数,可以将鼠标设定为给定的图标,我们推荐的图标大小为32 * 32

setCursor函数需要传入一个QCursor对象,该对象可以从QtGui中导入

QCursor对象可以是QT默认的几种鼠标样式之一,也可以自定义,自定义QCursor需要传入QPixmap对象,和鼠标热点(HotSpot)位置

鼠标热点:鼠标的图案远远大于一个 像素点的位置,一般我们的鼠标的箭头朝向左上角,因此默认是取左上角为我们命中的像素点,即热点,而QT为我们提供了更改热点的可能性。

采用QT自带的样式:

self.setCursor(ArrowCursor)
# 其他样式可以在 https://www.cnblogs.com/Jace-Lee/p/5946222.html 查到,我们不做说明

自定义样式:

# 5,15即光标的热点位置,这里的效果就是取偏左下角的像素点为选取点
cursor = QCursor(QPixmap('source/filename.png'),5,15)
self.setCursor(cursor)

设定快捷键/捕获滚轮

特殊方法

QAction设定快捷键相当之简单:

QAction.setShortcut("ctrl+0")

一般方法

这里我们以滚轮为例,还是一样的,只需要重载对应的函数即可

下面我们实现一个ctrl+滚轮来实现放大缩小的案例。

# 滚轮所对应的事件
def wheelEvent(self,event):
    # 当前键盘状态是否处于ctrl
    if QApplication.keyboardModifiers() == Qt.ControlModifier :
        # 滚轮转过的角度
        if event.delta() >0 :
            self.onBigger()
        else:
            self.onSmaller()

你可能感兴趣的:(PySide2)