首页 > 解决方案 > 在 QPixMap 上绘制矩形:第一次单击定义第一个角,移动鼠标并继续绘制,第二次单击定义形状

问题描述

我想在 QLabel 上的 QPixmap 上方绘制一个矩形(使用 PyQT5)。我的目的是下一个:

实际上,我有一个代码,允许执行第一次单击和第二次单击的操作,但在移动鼠标时不能绘图。我使用了paintEvent 和 mousePresEvent

        pixmap_ed = QPixmap(f"{self.image}")
        pixmap_ed_scaled = pixmap_ed.scaled(int(self.QLabel.width()), int(self.QLabel.height()), QtCore.Qt.KeepAspectRatio)
        self.QLabel.setPixmap(pixmap_ed_scaled)

    def paintEvent(self,event):
        if self.flag_dibujar == True and self.primer_click == 1 and self.segundo_click == 1:
            painter = QPainter(self.QLabel.pixmap())
            pen = QPen()
            pen.setColor(QtGui.QColor('green'))
            pen.setWidth(3)
            painter.setPen(pen)

            painter.drawRect(self.beginX,self.beginY, self.endX-self.beginX,self.endY-self.beginY)
            self.update()
            self.QLabel.update()

            self.primer_click = 0
            self.segundo_click = 0

    def mousePresEvent(self, event):
        if self.flag_dibujar == True:
            if self.primer_click == 0 and event.button() == QtCore.Qt.LeftButton:
                self.begin = event.pos()
                self.beginX = int(self.begin.x())
                self.beginY= int(self.begin.y()) 

                self.QLabel.update()
                self.primer_click = 1
            else:
                self.end = event.pos()
                self.endX = int(self.end.x())
                self.endY = int(self.end.y())

                self.QLabel.update()
                self.segundo_click = 1

标签: pythonpyqtpyqt5

解决方案


推荐阅读