gpt4 book ai didi

python - 在 PyQt5 中将图像插入 QGridLayout 并在图像顶部绘制

转载 作者:行者123 更新时间:2023-11-28 16:58:17 24 4
gpt4 key购买 nike

我是 PyQt 的新手,我正在尝试制作一个应用程序,左侧有一个 QPixmap,可以在上面绘制,右侧有一个 QTextEdit(用于简单的 OCR GUI)。我在看: PyQt5 Image and QGridlayout但我无法将它与下面的代码联系起来(我的头发都在抓挠!!)当我尝试调整以下代码时,我得到的是一个 QMainWindow,它以 QPixmap 为背景,可以用鼠标在其上绘制,而 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_())

关于python - 在 PyQt5 中将图像插入 QGridLayout 并在图像顶部绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com