软硬件环境
- Windows 10 64bit
- Anaconda3 with python 3.8
- PyQt5 5.15
简介
鼠标是界面交互的重要手段,本篇我们就来看看 PyQt5
中几个常见的鼠标事件及其示例代码。
单击事件
鼠标的单击其实就是 鼠标按下 –> 鼠标松开 的过程,对应的鼠标事件是 mousePressEvent
和 mouseReleaseEvent
,因此在窗口中只需要重写这两个方法即可。另外,可以通过判断 event
的 button
方法来判断是鼠标左键还是鼠标右键
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))
双击事件
鼠标的双击其实就是 鼠标双击 –> 鼠标松开 的过程,对应的鼠标事件是 mouseDoubleClickEvent
和 mouseReleaseEvent
,因此在窗口中只需要重写这两个方法即可
def mouseDoubleClickEvent(self, event):
print('mouseDoubleClickEvent')
def mouseReleaseEvent(self, event):
print('mouseReleaseEvent')
鼠标移动
在单击事件中加入鼠标的移动,鼠标单击 –> 按住鼠标并移动 –> 鼠标松开,对应的鼠标事件是mousePressEvent
、mouseMoveEvent
和 mouseReleaseEvent
,因此在窗口中只需要重写这三个方法即可
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')
光标进出窗口事件
这个光标进出窗口,其实就是焦点是否在窗体上,需要重写方法 enterEvent
和 leaveEvent
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
教程,请移步