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


Posted in Python onJune 17, 2019

在利用QT编写GUI程序时经常需要一些交互操作,常见的有鼠标事件、键盘事件等。今天我们要实现的是在label中已经显示的图像中绘制矩形框,以便进行下一步操作(如放大细节,选中感兴趣区域等)程序主要参考了知乎的小杨老师的专栏。

核心点是重写Label,使其实现相应的功能,看下面的一个小例子

from PyQt5.QtWidgets import QWidget, QApplication, QLabel
from PyQt5.QtCore import QRect, Qt
from PyQt5.QtGui import QImage, QPixmap, QPainter, QPen, QGuiApplication
import cv2
import sys
class MyLabel(QLabel):
 x0 = 0
 y0 = 0
 x1 = 0
 y1 = 0
 flag = False
 #鼠标点击事件
 def mousePressEvent(self,event):
  self.flag = True
  self.x0 = event.x()
  self.y0 = event.y()
 #鼠标释放事件
 def mouseReleaseEvent(self,event):
  self.flag = False
 #鼠标移动事件
 def mouseMoveEvent(self,event):
  if self.flag:
   self.x1 = event.x()
   self.y1 = event.y()
   self.update()
 #绘制事件
 def paintEvent(self, event):
  super().paintEvent(event)
  rect =QRect(self.x0, self.y0, abs(self.x1-self.x0), abs(self.y1-self.y0))
  painter = QPainter(self)
  painter.setPen(QPen(Qt.red,2,Qt.SolidLine))
  painter.drawRect(rect)
class Example(QWidget):
 def __init__(self):
  super().__init__()
  self.initUI()
 def initUI(self):
  self.resize(675, 300)
  self.setWindowTitle('在label中绘制矩形')
  self.lb = MyLabel(self) #重定义的label
  self.lb.setGeometry(QRect(30, 30, 511, 541))
  img = cv2.imread('2.jpg')
  height, width, bytesPerComponent = img.shape
  bytesPerLine = 3 * width
  cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img)
  QImg = QImage(img.data, width, height, bytesPerLine,QImage.Format_RGB888)
  pixmap = QPixmap.fromImage(QImg)
  self.lb.setPixmap(pixmap)
  self.lb.setCursor(Qt.CrossCursor)
  self.show()
if __name__ == '__main__':
 app = QApplication(sys.argv)
 x = Example()
 sys.exit(app.exec_())

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

运行结果如上所示,可以拖动鼠标实现在label显示的图像上绘制矩形框。

以上这篇PyQt5 在label显示的图片中绘制矩形的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python中的文档测试模块
Apr 28 Python
python抓取百度首页的方法
May 19 Python
详解Python的Django框架中的模版继承
Jul 16 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python学习小技巧总结
Jun 10 Python
python中字符串内置函数的用法总结
Sep 13 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
python中altair可视化库实例用法
Jan 26 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
PyQt5显示GIF图片的方法
Jun 17 #Python
详解pytorch 0.4.0迁移指南
Jun 16 #Python
对pyqt5多线程正确的开启姿势详解
Jun 14 #Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 #Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 #Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 #Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 #Python
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
讲解Python中fileno()方法的使用
2015/05/24 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python探索之ModelForm代码详解
2017/10/26 Python
python使用folium库绘制地图点击框
2018/09/21 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
pycharm的python_stubs问题
2020/04/08 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
公司财务自我评价分享
2013/12/17 职场文书
会计岗位说明书
2014/07/29 职场文书
《三国志》赏析
2019/08/27 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS