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读写Excel文件方法介绍
Nov 22 Python
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
详解python的ORM中Pony用法
Feb 09 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
在Python中增加和插入元素的示例
Nov 01 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
python中partial()基础用法说明
Dec 30 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
详细分析Python垃圾回收机制
Jul 01 Python
详解python polyscope库的安装和例程
Nov 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
星际争霸任务指南——人族
2020/03/04 星际争霸
PHP去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
解析link_mysql的php版
2013/06/30 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
Node.js事件的正确使用方法
2019/04/05 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
寻找网站后台地址的python脚本
2014/09/01 Python
python获取当前计算机cpu数量的方法
2015/04/18 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python学生管理系统
2019/01/30 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
QML实现钟表效果
2020/06/02 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书