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计算方程式根的方法
May 07 Python
python获取当前时间对应unix时间戳的方法
May 15 Python
Python中的hypot()方法使用简介
May 18 Python
python 拼接文件路径的方法
Oct 23 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
Python Web版语音合成实例详解
Jul 16 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Python偏函数实现原理及应用
Nov 20 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
2006/12/23 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
php中hashtable实现示例分享
2014/02/13 PHP
php获取参数的几种方法总结
2014/02/18 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
php源码的使用方法讲解
2019/09/26 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
python实现udp数据报传输的方法
2014/09/26 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
党支部考察意见范文
2015/06/02 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android