跳至正文
View Categories

< 1 min read

主要内容 #

  • 鼠标事件编写模块
  • 点击鼠标事件
  • 移动鼠标事件
  • 释放鼠标事件
  • 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)的重写

    习题 #