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脚本操作MongoDB的教程
Apr 16 Python
Python内建数据结构详解
Feb 03 Python
python爬虫之百度API调用方法
Jun 11 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
基于python的Paxos算法实现
Jul 03 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
基于python使用tibco ems代码实例
Dec 20 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP cron中的批处理
2008/09/16 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
javascript第一课
2007/02/27 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
浅析python的Lambda表达式
2019/02/27 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
365 Tickets英国:全球景点门票
2019/07/06 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
2014国庆节标语口号
2014/09/19 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
python多线程方法详解
2022/01/18 Python