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实现排序算法
Feb 14 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
Django REST framework视图的用法
Jan 16 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
Python Django框架模板渲染功能示例
Nov 08 Python
Python使用Excel将数据写入多个sheet
May 16 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python中常见的导入方式总结
May 06 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
php设置静态内容缓存时间的方法
2014/12/01 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
python实现简单socket通信的方法
2016/04/19 Python
使用Python生成XML的方法实例
2017/03/21 Python
wxpython绘制圆角窗体
2019/11/18 Python
三个python爬虫项目实例代码
2019/12/28 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
CSS3 边框效果
2019/11/04 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
资深地理教师自我评价
2013/09/21 职场文书
听课评语大全
2014/04/30 职场文书
写给医生的感谢信
2015/01/22 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
创业计划书之美容店
2019/09/16 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL