前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python pyqt5 绘图QPixmap

python pyqt5 绘图QPixmap

作者头像
用户5760343
发布2019-07-22 11:17:04
2.9K0
发布2019-07-22 11:17:04
举报
文章被收录于专栏:sktjsktj

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()

代码语言:javascript
复制
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()

代码语言:javascript
复制
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_())

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • -- coding: utf-8 --
  • -- coding: utf-8 --
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档