python pyqt5 绘图QPixmap

image.png

-- coding: utf-8 --

"""
【简介】
使用paintEvent在窗口实现划线例子

"""

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtCore import Qt, QPoint

class Winform(QWidget):
def init(self, parent=None):
super(Winform, self).init(parent)
self.setWindowTitle("绘图例子")
self.pix = QPixmap()
self.lastPoint = QPoint()
self.endPoint = QPoint()
self.initUi()

def initUi(self):
    # 窗口大小设置为600*500
    self.resize(600, 500)
    # 画布大小为400*400,背景为白色
    self.pix = QPixmap(400, 400)
    self.pix.fill(Qt.white)

def paintEvent(self, event):
    pp = QPainter(self.pix)
    # 根据鼠标指针前后两个位置绘制直线
    pp.drawLine(self.lastPoint, self.endPoint)
    # 让前一个坐标值等于后一个坐标值,
    # 这样就能实现画出连续的线
    self.lastPoint = self.endPoint
    painter = QPainter(self)
    painter.drawPixmap(0, 0, self.pix)

def mousePressEvent(self, event):
    # 鼠标左键按下
    if event.button() == Qt.LeftButton:
        self.lastPoint = event.pos()
        self.endPoint = self.lastPoint

def mouseMoveEvent(self, event):
    # 鼠标左键按下的同时移动鼠标
    if event.buttons() and Qt.LeftButton:
        self.endPoint = event.pos()
        # 进行重新绘制
        self.update()

def mouseReleaseEvent(self, event):
    # 鼠标左键释放
    if event.button() == Qt.LeftButton:
        self.endPoint = event.pos()
        # 进行重新绘制
        self.update()

if name == "main":
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())


-- coding: utf-8 --

"""
【简介】
双缓冲绘图

"""

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtCore import Qt, QPoint

class Winform(QWidget):
def init(self, parent=None):
super(Winform, self).init(parent)
self.setWindowTitle("双缓冲绘图例子")
self.pix = QPixmap()
self.lastPoint = QPoint()
self.endPoint = QPoint()
# 辅助画布
self.tempPix = QPixmap()
# 标志是否正在绘图
self.isDrawing = False
self.initUi()

def initUi(self):
    # 窗口大小设置为600*500
    self.resize(600, 500);
    # 画布大小为400*400,背景为白色
    self.pix = QPixmap(400, 400);
    self.pix.fill(Qt.white);

def paintEvent(self, event):
    painter = QPainter(self)
    x = self.lastPoint.x()
    y = self.lastPoint.y()
    w = self.endPoint.x() - x
    h = self.endPoint.y() - y

    # 如果正在绘图,就在辅助画布上绘制
    if self.isDrawing:
        # 将以前pix中的内容复制到tempPix中,保证以前的内容不消失
        self.tempPix = self.pix
        pp = QPainter(self.tempPix)
        pp.drawRect(x, y, w, h)
        painter.drawPixmap(0, 0, self.tempPix)
    else:
        pp = QPainter(self.pix)
        pp.drawRect(x, y, w, h)
        painter.drawPixmap(0, 0, self.pix)

def mousePressEvent(self, event):
    # 鼠标左键按下
    if event.button() == Qt.LeftButton:
        self.lastPoint = event.pos()
        self.endPoint = self.lastPoint
        self.isDrawing = True

def mouseReleaseEvent(self, event):
    # 鼠标左键释放
    if event.button() == Qt.LeftButton:
        self.endPoint = event.pos()
        # 进行重新绘制
        self.update()
        self.isDrawing = False

if name == "main":
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())

你可能感兴趣的:(python pyqt5 绘图QPixmap)