欢迎访问宙启技术站
智能推送

PyQt5 在label显示的图片中绘制矩形的方法

发布时间:2023-05-14 17:35:51

在涉及到图像处理的应用程序中,常常需要在图像中标记或框选出感兴趣的区域,这就需要在图片中绘制矩形。PyQt5是一个应用场景广泛的GUI框架,它提供了Qt的python绑定。在PyQt5中,我们可以使用QPainter类在label显示的图片中绘制矩形。

QPainter是Qt5提供的一个2D图形绘制类,可以在Widget上绘制各种图形,比如线、矩形、弧、椭圆、文字等等。QPainter是一个非常强大、灵活的类,它可以在Widget上自由绘制几何图形,使得我们可以灵活的实现各种UI效果。

下面我们来演示一下如何在PyQt5中使用QPainter绘制矩形:

1. 创建一个QPainter对象,该对象包含所需的设备context

2. 用setPen()和setBrush()方法设置画笔和画刷,分别指定矩形的边框颜色和矩形填充颜色

3. 绘制矩形,使用drawRect()函数定义矩形的位置和大小即可

具体的实现代码如下:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap, QPainter, QColor

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 创建widget、布局和label
        self.layout = QVBoxLayout(self)
        self.label = QLabel(self)
        self.layout.addWidget(self.label)

        # 加载图片
        self.pixmap = QPixmap('image.jpg')
        self.label.setPixmap(self.pixmap)

        # 设置矩形参数
        self.rect = QRect(50, 50, 200, 200)
        self.pen_color = Qt.green
        self.brush_color = QColor(0, 0, 255, 50)

    def paintEvent(self, event):
        painter = QPainter(self.label.pixmap())
        painter.setPen(self.pen_color)
        painter.setBrush(self.brush_color)
        painter.drawRect(self.rect)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.resize(500, 500)
    window.show()
    app.exec_()

在上面的代码中,我们创建了一个QPainter对象,将它绑定到self.label的pixmap上,并用setPen()和setBrush()方法设置矩形的颜色。最后,我们在paintEvent()函数中调用drawRect()函数绘制矩形。

需要注意的是,我们需要在QLabel上显示图片时,把图片放在pixmap里面,并把该pixmap设置到QLabel中。因此,在paintEvent()函数中,我们可以通过self.label.pixmap()获取pixmap对象并进行绘制。并且在paintEvent()函数中,我们更新了label的pixmap,这样每次label重绘时,我们都可以重新绘制矩形。