捕获鼠标事件
所有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()