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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
Python实现的最近最少使用算法
Jul 10 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python中防止sql注入的方法详解
Feb 25 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
python实现决策树分类(2)
Aug 30 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
pytorch 一行代码查看网络参数总量的实现
May 12 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
简单的PHP图片上传程序
2008/03/27 PHP
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
Python进阶之递归函数的用法及其示例
2018/01/31 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
解释i节点在文件系统中的作用
2013/11/26 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS