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的collections模块中defaultdict类型的用法
Jul 07 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
pycharm 设置项目的根目录教程
Feb 12 Python
Python netmiko模块的使用
Feb 14 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
什么是Python中的匿名函数
Jun 02 Python
使用npy转image图像并保存的实例
Jul 01 Python
python中pdb模块实例用法
Jan 15 Python
Python使用openpyxl复制整张sheet
Mar 24 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
做一个有下拉功能的留言版
2006/10/09 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
javascript中的面向对象
2017/03/30 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
python opencv实现图像配准与比较
2021/02/09 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
采购部部长岗位职责
2014/02/06 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
幸福中国演讲稿
2014/09/12 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS
Mysql如何查看是否使用到索引
2022/12/24 MySQL