欢迎访问本站,希望站内信息可以帮助到您!感兴趣的,可以加入我的知识星球,一对一解答!

PyQt5系列教程(二十八)鼠标事件

PyQt5开发 迷途小书童 327℃ 0评论

软硬件环境

  • Windows 10 64bit
  • Anaconda3 with python 3.8
  • PyQt5 5.15

简介

鼠标是界面交互的重要手段,本篇我们就来看看 PyQt5 中几个常见的鼠标事件及其示例代码。

单击事件

鼠标的单击其实就是 鼠标按下 --> 鼠标松开 的过程,对应的鼠标事件是 mousePressEventmouseReleaseEvent,因此在窗口中只需要重写这两个方法即可。另外,可以通过判断 eventbutton 方法来判断是鼠标左键还是鼠标右键

def mousePressEvent(self, event):
    print('mousePressEvent')

    if event.button() == Qt.LeftButton:
        print('left')
    elif event.button() == Qt.RightButton:
        print('right')
    elif event.button() == Qt.MiddleButton:
        print('middle')

def mouseReleaseEvent(self, event):
    print('mouseReleaseEvent')

如果要得到鼠标点击位置的坐标,可以通过 event 的相关方法得到,看下面的代码片段

# 相对于窗口的位置
x = event.x()
y = event.y()
# xy类型是QPoint,QPoint的x()和y()方法就是x和y的值
xy = event.pos()
print('x={}, y={}, xy={}, x={}, y={}'.format(x, y, xy, xy.x(), xy.y()))

# 相对于屏幕的位置
x_global = event.globalX()
y_global = event.globalY()
# xy_global类型是QPoint
xy_global = event.globalPos()
print('x_global={}, y_global={}, xy_global={}'.format(x_global, y_global, xy_global))

双击事件

鼠标的双击其实就是 鼠标双击 --> 鼠标松开 的过程,对应的鼠标事件是 mouseDoubleClickEventmouseReleaseEvent,因此在窗口中只需要重写这两个方法即可

def mouseDoubleClickEvent(self, event):
    print('mouseDoubleClickEvent')

def mouseReleaseEvent(self, event):
    print('mouseReleaseEvent')

鼠标移动

在单击事件中加入鼠标的移动,鼠标单击 --> 按住鼠标并移动 --> 鼠标松开,对应的鼠标事件是mousePressEventmouseMoveEventmouseReleaseEvent,因此在窗口中只需要重写这三个方法即可

def mousePressEvent(self, event):
    print('mousePressEvent')

def mouseMoveEvent(self, event):
    print('mouseMoveEvent')

def mouseReleaseEvent(self, event):
    print('mouseReleaseEvent')

滚轮事件

鼠标滚轮事件需要重写 wheelEvent

def wheelEvent(self, event):
    print('wheelEvent')

光标进出窗口事件

这个光标进出窗口,其实就是焦点是否在窗体上,需要重写方法 enterEventleaveEvent

def enterEvent(self, event):
    print('enterEvent')

def leaveEvent(self, event):
    print('leaveEvent')

窗口关闭事件

这里将窗口关闭事件也放在鼠标事件里一起讨论。也是实际开发中经常会用到的功能,这里需要我们重写 closeEvent 方法

def closeEvent(self, event):
    """
    重写 closeEvent 方法,实现在窗口关闭时去执行一些功能
    """
    reply = QMessageBox.question(self,
                                 '这是标题',
                                 "这是消息体",
                                 QMessageBox.Yes | QMessageBox.No,
                                 QMessageBox.No)
    if reply == QMessageBox.Yes:
        # 关闭窗口
        event.accept()
    else:
        # 取消
        event.ignore()

源码下载

https://github.com/xugaoxiang/learningPyQt5

PyQt5系列教程

更多PyQt5教程,请移步

https://xugaoxiang.com/category/python/pyqt5/

喜欢 (1)
发表我的评论

表情
退出移动版