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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
python多个模块py文件的数据共享实例
Jan 11 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
pyinstaller还原python代码过程图解
Jan 08 Python
python3将变量输入的简单实例
Aug 19 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更快的提供文件下载的代码
2012/06/13 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Django框架自定义session处理操作示例
2019/05/27 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
文字自荐书范文
2014/02/10 职场文书
安全标语口号
2014/06/09 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
放假通知范文
2015/04/14 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
HTML基础详解(下)
2021/10/16 HTML / CSS