博主想自己做一个图片标注工具,用于制作目标检测数据集,其中一个功能就是拖拽鼠标选中矩形区域,参考了几篇博客,自己实现了一下,效果如下:
下面是实现:
import sys,math
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Drawing(QWidget):
def __init__(self,parent=None):
super(Drawing,self).__init__(parent)
self.resize(600,400)
self.setWindowTitle('拖拽绘制矩形')
self.rect = None
#重写绘制函数
def paintEvent(self,event):
#初始化绘图工具
qp=QPainter()
#开始在窗口绘制
qp.begin(self)
#自定义画点方法
if self.rect:
self.drawRect(qp)
#结束在窗口的绘制
qp.end()
def drawRect(self,qp):
#创建红色,宽度为4像素的画笔
pen = QPen(Qt.red, 4)
qp.setPen(pen)
qp.drawRect(*self.rect)
#重写三个时间处理
def mousePressEvent (self, event):
print("mouse press")
self.rect = (event.x(), event.y(), 0, 0)
def mouseReleaseEvent (self, event) :
print("mouse release")
def mouseMoveEvent(self, event):
start_x, start_y = self.rect[0:2]
self.rect = (start_x, start_y, event.x() - start_x, event.y() - start_y)
self.update()
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=Drawing()
demo.show()
sys.exit(app.exec_())