专栏首页sktjpython pyqt5 绘图QPixmap

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python pyqt5 QScollBar

    import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.Qt...

    用户5760343
  • python pyqt5 按钮 QPushButton

    QAbstractButton/QPushButton,QToolButton,QRadioButton,QCheckBox 按钮状态: isDown() ...

    用户5760343
  • python pyqt5 窗体动画效果

    import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui ...

    用户5760343
  • Python面向对象(成员)(二)

            特点: 在声明的时候. 需要给出self, self必须放在第一个位置

    py3study
  • 利用Python编写一个行业专用的小计算器

    前言:本文讲述的是如何利用python编程制作一个适用于指定行业的计算器,方便计算结果,涵盖的知识点由Python编写GUI界面程序,利用爬虫采集实时的汇率数据...

    用户7886150
  • python的tkinter编程(九)Text多行文本框的详细解读

    一天不写程序难受
  • 抽奖小程序

    本例涉及到的新的内容有:QComboBox, QSpinBox, QCheckBox,打开文件对话框和标准消息对话框的使用,布局的嵌套,多线程的应用。

    用户6021899
  • python的tkinter编程(八)Entry组件的详细介绍,以登录界面作为讲解

    写一个按钮,绑定一个方法,当点击这个按钮的时候,就会执行这个方法,在这个方法里面 获取到对应的你输入的值,将获取到的值传到数据库里面进行比对,失败给一个返回的...

    一天不写程序难受
  • PyQt 编程入门(六.3)

    from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import * import sys

    用户6021899
  • PyQt5 非模态对话框(live 型)

    本篇介绍非模态“实时”(live)对话框。与上一篇讲的”apply型“非模态对话框的区别是,非模态“实时”(live)对话框没有任何按钮,且所做的任何改变会自动...

    用户6021899

扫码关注云+社区

领取腾讯云代金券