PyQt5 QPainter在QPixmap上实现单一鼠标绘图功能。两种方式:在paintEvent函数外实现和内实现

本文介绍了如何使用PyQt5的QPainter在QPixmap上实现单一鼠标绘图功能,分别讨论了在paintEvent函数外和内部实现的两种方法。外部实现占用内存小但无法撤回,内部实现可以通过更新和记录历史路径实现撤回功能,但内存占用较大。
摘要由CSDN通过智能技术生成

在paintEvent函数外实现(即,不使用paintEvent函数):

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

class myMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.image = QPixmap(1000, 1000)
        self.image.fill(Qt.transparent)# 填充透明色
        self.setWindowTitle("简单的画板")
        self.pos_xy = []
        self.pen = QPen(Qt.black, 2, Qt.SolidLine)
        self.painton = True
        
        self.imageLabel = QLabel()
        self.setCentralWidget(self.imageLabel)
        self.imageLabel.setPixmap(self.image)
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果您想要实时展示在QPixmap上的绘制结果,可以将QPixmap放到QLabel上,并在每次绘制后更新QLabel的显示内容。下面是一个简单的例子: ```python from PyQt5.QtWidgets import QLabel, QWidget, QVBoxLayout, QApplication from PyQt5.QtGui import QPixmap, QPainter, QPen, QColor from PyQt5.QtCore import Qt, QTimer class MyWidget(QWidget): def __init__(self): super().__init__() # 创建一个QLabel用于显示绘制结果 self.label = QLabel(self) self.label.setGeometry(0, 0, 400, 400) # 创建一个QPixmap用于绘制 self.pixmap = QPixmap(400, 400) self.pixmap.fill(Qt.white) # 创建一个QPainter对象 self.painter = QPainter(self.pixmap) self.painter.setRenderHint(QPainter.Antialiasing) # 创建一个定时器用于更新绘制结果 self.timer = QTimer(self) self.timer.setInterval(500) self.timer.timeout.connect(self.updatePixmap) self.timer.start() def paintEvent(self, event): # 绘制内容 pen = QPen(QColor(0, 0, 255)) pen.setWidth(2) self.painter.setPen(pen) self.painter.drawLine(0, 0, 400, 400) self.painter.drawLine(400, 0, 0, 400) self.painter.drawRect(100, 100, 200, 200) self.painter.drawEllipse(50, 50, 300, 300) # 将绘制结果显示在QLabel上 self.label.setPixmap(self.pixmap) def updatePixmap(self): # 每隔一段时间更新绘制结果 self.pixmap.fill(Qt.white) self.update() if __name__ == '__main__': app = QApplication([]) widget = MyWidget() widget.show() app.exec_() ``` 在上面的代码中,我们创建了一个自定义的QWidget,并在其中创建了一个QLabel和一个QPixmap。在自定义QWidget的paintEvent()方法中,我们绘制了一些内容,并将绘制结果显示在QLabel上。我们还创建了一个定时器,每隔500ms就会更新QPixmap的绘制结果。在updatePixmap()方法中,我们将QPixmap填充为白色,并调用update()方法来触发paintEvent()方法的调用,从而更新绘制结果。最后,我们将自定义QWidget显示出来,并启动Qt应用程序的事件循环。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值