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重绘时,我们都可以重新绘制矩形。
