主要内容 #
1. 鼠标事件编写模块 #
在绘制图像的时候,通常是使用鼠标进行拖拽画图,具体为:
1. 点击鼠标左键不放 (需要编写点击鼠标时的事件)
2. 然后移动鼠标,在移动鼠标的进程中,画布上会显示鼠标移动的轨迹,以此来达到绘图的目的。(需要编写鼠标移动的事件)
3. 当释放鼠标左键时,则不再绘制图像(需要编写放开鼠标时的事件)
2. 点击鼠标事件 #
mousePressEvent(mouseEvent)为父类QWidget中专门处理点击鼠标事件的函数
我们需要重新写函数mousePressEvent(mouseEvent)里的功能,来满足我们绘图的需求
在类PaintImage中添加点击鼠标事件的方法,程序如下:
def mousePressEvent(self,mouseEvent): if mouseEvent.button() == Qt.LeftButton: #当鼠标事件为点击左键的时候 self.x1 = mouseEvent.x() #将鼠标当前的x坐标赋值给画笔当前的x坐标 self.y1 = mouseEvent.y() #将鼠标当前的y坐标赋值给画笔当前的y坐标 self.x2 = self.x1 #将鼠标当前的x坐标赋值给画笔上一次的x坐标 self.y2 = self.y1 #将鼠标当前的x坐标赋值给画笔上一次的y坐标
3. 移动鼠标事件 #
mouseMoveEvent(mouseEvent)为父类QWidget中专门处理移动鼠标事件的函数
我们需要重新写函数mouseMoveEvent(mouseEvent)里的功能,来满足我们绘图的需求
在类PaintImage中添加移动鼠标事件的方法,程序如下:
def mouseMoveEvent(self,mouseEvent): if mouseEvent.buttons() and Qt.LeftButton: #当点击的是鼠标左键并且鼠标是在移动的时候 self.x1 = mouseEvent.x() #将鼠标当前的x坐标赋值给画笔当前的x坐标 self.y1 = mouseEvent.y() #将鼠标当前的x坐标赋值给画笔当前的y坐标 self.update() #鼠标在移动过程中,不断更新当前位置,并在上一个位置和当前位置间画线
4. 释放鼠标事件 #
mouseReleaseEvent(mouseEvent)为父类QWidget中专门处理释放鼠标事件的函数
我们需要重新写函数mouseReleaseEvent(mouseEvent)里的功能,来满足我们绘图的需求
在类PaintImage中添加释放鼠标事件的方法,程序如下:
def mouseReleaseEvent(self, mouseEvent): if mouseEvent.button() == Qt.LeftButton: #当释放的是鼠标左键的时候 self.x1 = mouseEvent.x() #将鼠标当前的x坐标赋值给画笔当前的x坐标 self.y1 = mouseEvent.y() #将鼠标当前的x坐标赋值给画笔当前的y坐标 self.update() #在鼠标释放的瞬间,更新当前位置,并在上一个位置和当前位置间画线,完成一次绘制
至此,我们可以在画布中任意绘制图像了。
4. 小结 #
- 鼠标事件编写的三大方法:点击鼠标事件、移动鼠标事件、释放鼠标事件
- 鼠标事件函数(mousePressEvent, mouseMoveEvent, mouseReleaseEvent)的重写
习题 #
- 无