【pyqt5】拖拽绘制矩形框

el/2024/2/25 22:55:27

博主想自己做一个图片标注工具,用于制作目标检测数据集,其中一个功能就是拖拽鼠标选中矩形区域,参考了几篇博客,自己实现了一下,效果如下:
在这里插入图片描述
下面是实现:

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_())

参考

  • [1] https://blog.csdn.net/leemboy/article/details/80462632
  • [2] https://blog.csdn.net/u011218356/article/details/80950766

http://www.ngui.cc/el/4894909.html

相关文章

【numpy】ndarray交换两行(两列)、重新排列

numpy进行行(列)交换非常简便,因为numpy的下标访问是基于视图机制的,对子视图重新赋值即可。 a np.arange(12).reshape(3, 4) print(a) a[[0, 2]] a[[2, 0]] a运行结果: [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]] array([[ 8, 9, 10, 11],[ 4, 5…

【python】python的for-else语法解释

若for循环正常结束,则执行else, 若for循环break,则不执行else。 for item in container:if search_something(item):# Found it!process(item)break else:# Didnt find anything..not_found_in_container()

【python】编码互转(16进制|bytes|base64|字符串)

基于python3 # 16进制转bytes byte_arr bytes.fromhex("1f2f3f4f") # bytes转16进制 byte_arr.hex() # bytes转base64,输入输出都是bytes import base64 base64.b64encode(byte_arr) # base64转bytes base64.b64decode(base64_byte_arr) # 字符串转byte…

【spark】spark dataframe空值·部分原因

数据类型不一致导致的空值 今天在写一个spark job(pyspark)时又遇到了,又遇到了数据处理的两大拦路虎之一的空数据问题,检查数据源,确定不会有空值后,开始检查代码。最终发现是代码之前的维护者使用了一个字符串作为一个long typ…

【git】强制使用远程分支(git pull -f ?)

git reset --hard origin/your-branch参考 https://stackoverflow.com/questions/1125968/how-do-i-force-git-pull-to-overwrite-local-files

oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入

今天要导入一个人有别人发过来的数据库备份,结果出现如下问题: 百度了一下原因,主要是一个DBA用户权限问题,导出数据的用户拥有DBA权限,而我要导入的用户没有这个权限而已 解决的办法由两个,一个是把导出的…

设置MyEclipse 9/10中的html/JSP编辑自动提示

在myeclipse 9以前的版本中,我们如果要为html编辑器添加自动的代码提示可以这样操作: windows-->preferences-->MyEclipse-->Files andEditors-->HTML-->HTML Source-->Content assist 在右边的在Prompt when these characters are in…

Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4

一般情况下可能是文件格式有问题,将正确的文件内容替换掉错误的文件内容,不断地尝试,直到文件不报错,当然也有可能是下面的原因:下面是2.7.1版本的方法,其他类似) 或者是:进入该jar包指示的路径,删除.lastUpdated文件,然后项目右键-->maven-->Upda…

hibernate 离线条件查询

条件查询一般是通过以下三个类完成的: 1、Criteria:代表一次查询 2、Criterion:代表一个查询条件 3、Restriction:代表查询条件的工具类 执行条件查询的步骤如下: …