pyqt5 图像上划线_python-将图像插入QGridLayout并在PyQt5中的图像上方绘制

本文介绍了如何使用PyQt5创建一个应用,该应用包含一个左侧显示QPixmap的区域,用户可以在该区域的图像上进行绘制。通过QGridLayout将图像和QTextEdit结合,并实现鼠标点击和移动事件来实现在图像上画线的功能。
摘要由CSDN通过智能技术生成

我是PyQt的新手,正尝试制作一个带有可以在其上绘制的左侧QPixmap和右侧的QTextEdit的应用程序(用于简单的OCR GUI).

我看着:

PyQt5 Image and QGridlayout

但是我无法将其与下面的代码关联(我的头发被所有头部抓挠掉了!!)

当我尝试修改以下代码时,得到的是以QPixmap为背景的QMainWindow,可以用鼠标在其上绘制,而第二次出现的QPixmap在其正确位置上,则无法绘制.有人可以告诉我我在做什么错吗?

非常感谢你!

# https://stackoverflow.com/questions/51475306/

import sys

from PyQt5.QtCore import Qt, QPoint

from PyQt5.QtWidgets import QMainWindow, QApplication,QGridLayout, QLabel, QWidget, QTextEdit

from PyQt5.QtGui import QPixmap, QPainter, QPen

class Menu(QMainWindow):

def __init__(self):

super().__init__()

self.drawing = False

self.lastPoint = QPoint()

self.image = QPixmap("S3.png")

self.setGeometry(100, 100, 500, 300)

self.resize(self.image.width(), self.image.height())

layout = QGridLayout()

# Add a QTextEdit box

self.edit = QTextEdit()

layout.addWidget(self.edit, 0, 0, 10, 20)

# This:

# https://stackoverflow.com/questions/52616553

# indicates that a QPixmap must be put into a label to insert into a QGridLayout

self.label = QLabel()

self.label.setPixmap(self.image)

layout.addWidget(self.label, 10, 20, 10, 20)

# https://stackoverflow.com/questions/37304684/

self.widget = QWidget()

self.widget.setLayout(layout)

self.setCentralWidget(self.widget)

self.show()

def paintEvent(self, event):

painter = QPainter(self)

painter.drawPixmap(self.rect(), self.image)

def mousePressEvent(self, event):

if event.button() == Qt.LeftButton:

self.drawing = True

self.lastPoint = event.pos()

print(self.lastPoint)

def mouseMoveEvent(self, event):

if event.buttons() and Qt.LeftButton and self.drawing:

painter = QPainter(self.image)

painter.setPen(QPen(Qt.red, 3, Qt.SolidLine))

painter.drawLine(self.lastPoint, event.pos())

print(self.lastPoint,event.pos())

self.lastPoint = event.pos()

self.update()

def mouseReleaseEvent(self, event):

if event.button == Qt.LeftButton:

self.drawing = False

if __name__ == '__main__':

app = QApplication(sys.argv)

mainMenu = Menu()

sys.exit(app.exec_())

解决方法:

每个小部件都必须完成特定的任务,因此,我创建了一个仅具有绘画功能的小部件,主小部件用作绘画小部件和QTextEdit的容器.

from PyQt5 import QtCore, QtGui, QtWidgets

class Label(QtWidgets.QWidget):

def __init__(self, parent=None):

super(Label, self).__init__(parent)

self.image = QtGui.QPixmap("S3.png")

self.drawing = False

self.lastPoint = QtCore.QPoint()

def paintEvent(self, event):

painter = QtGui.QPainter(self)

painter.drawPixmap(QtCore.QPoint(), self.image)

def mousePressEvent(self, event):

if event.button() == QtCore.Qt.LeftButton:

self.drawing = True

self.lastPoint = event.pos()

def mouseMoveEvent(self, event):

if event.buttons() and QtCore.Qt.LeftButton and self.drawing:

painter = QtGui.QPainter(self.image)

painter.setPen(QtGui.QPen(QtCore.Qt.red, 3, QtCore.Qt.SolidLine))

painter.drawLine(self.lastPoint, event.pos())

self.lastPoint = event.pos()

self.update()

def mouseReleaseEvent(self, event):

if event.button == QtCore.Qt.LeftButton:

self.drawing = False

def sizeHint(self):

return self.image.size()

class MainWindow(QtWidgets.QMainWindow):

def __init__(self, parent=None):

super().__init__(parent)

self.label = Label()

self.textedit = QtWidgets.QTextEdit()

widget = QtWidgets.QWidget()

self.setCentralWidget(widget)

lay = QtWidgets.QHBoxLayout(widget)

lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

lay.addWidget(self.textedit)

if __name__ == "__main__":

import sys

app = QtWidgets.QApplication(sys.argv)

w = MainWindow()

w.show()

sys.exit(app.exec_())

标签:pyqt5,pyqt,qpainter,qgridlayout,python

来源: https://codeday.me/bug/20191210/2104615.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值