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中用于处理字符串的center()方法
May 18 Python
Python Grid使用和布局详解
Jun 30 Python
Python  unittest单元测试框架的使用
Sep 08 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
python实现双色球随机选号
Jan 01 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python小白不正确的使用类变量实例
May 29 Python
如何利用python进行时间序列分析
Aug 04 Python
python数字图像处理:图像简单滤波
Jun 28 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP设计模式 注册表模式
2012/02/05 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python实现购物车购物小程序
2018/04/18 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python实现学员管理系统
2019/02/26 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
园林技术个人的自我评价
2014/02/15 职场文书
励志演讲稿800字
2014/08/21 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2014年共青团工作总结
2014/12/10 职场文书
男方婚礼答谢词
2015/01/20 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书