Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将图像插入QGridLayout并在PyQt5中的图像顶部绘制_Python_Pyqt_Pyqt5_Qpainter_Qgridlayout - Fatal编程技术网

Python 将图像插入QGridLayout并在PyQt5中的图像顶部绘制

Python 将图像插入QGridLayout并在PyQt5中的图像顶部绘制,python,pyqt,pyqt5,qpainter,qgridlayout,Python,Pyqt,Pyqt5,Qpainter,Qgridlayout,我是PyQt的新手,我正在尝试制作一个应用程序,左边有一个QPixmap,可以在上面绘制,右边有一个QTextEdit(用于简单的OCR GUI)。 我看了看: 但我无法将其与下面的代码连接起来(我的头发都快掉光了,抓头了!!) 当我尝试修改下面的代码时,我得到的是一个QPixmap作为背景的QMainWindow,可以用鼠标在其上绘制,而QPixmap在其正确位置的第二次出现则无法在其上绘制。有人能告诉我我做错了什么吗? 多谢各位 # https://stackoverflow.com/que

我是PyQt的新手,我正在尝试制作一个应用程序,左边有一个QPixmap,可以在上面绘制,右边有一个QTextEdit(用于简单的OCR GUI)。 我看了看: 但我无法将其与下面的代码连接起来(我的头发都快掉光了,抓头了!!) 当我尝试修改下面的代码时,我得到的是一个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的容器

从PyQt5导入QtCore、QtGui、qtwidget
类标签(qtwidts.QWidget):
def uuu init uuu(self,parent=None):
超级(标签,自我)。\uuuu初始化\uuuuuuuu(父级)
self.image=QtGui.QPixmap(“S3.png”)
self.drawing=False
self.lastPoint=QtCore.QPoint()
def paintEvent(自身,事件):
painter=QtGui.QPainter(自)
painter.drawPixmap(QtCore.QPoint(),self.image)
def鼠标压力事件(自身、事件):
如果event.button()==QtCore.Qt.LeftButton:
self.drawing=True
self.lastPoint=event.pos()
def mouseMoveEvent(自身、事件):
如果event.buttons()和QtCore.Qt.LeftButton与self.drawing:
painter=QtGui.QPainter(self.image)
painter.setPen(QtGui.QPen(QtCore.Qt.red,3,QtCore.Qt.SolidLine))
绘制线(self.lastPoint,event.pos())
self.lastPoint=event.pos()
self.update()
def mouseReleaseEvent(自身,事件):
如果event.button==QtCore.Qt.LeftButton:
self.drawing=False
def sizeHint(自身):
返回self.image.size()
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
super()。\uuuu init\uuuu(父级)
self.label=label()
self.textedit=QtWidgets.QTextEdit()
widget=qtwidts.QWidget()
self.setCentralWidget(小部件)
lay=qtwidts.QHBoxLayout(小部件)
lay.addWidget(self.label,alignment=QtCore.Qt.AlignCenter)
lay.addWidget(self.textedit)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=主窗口()
w、 show()
sys.exit(app.exec_())

我感觉原作者可能会回复我的邮件,非常感谢。我看了很多与你相关的代码,无法把这些点连接起来,但这个例子确实让我很受启发。再次感谢