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 代码性能优化技巧分享
Aug 07 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
python图形用户接口实例详解
Dec 16 Python
pandas的resample重采样的使用
Apr 24 Python
Python中内建模块collections如何使用
May 27 Python
pytorch SENet实现案例
Jun 24 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
Python调用Redis的示例代码
Nov 24 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
php str_pad 函数使用详解
2009/01/13 PHP
PHP学习之整理字符串
2011/04/17 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
python中global用法实例分析
2015/04/30 Python
Python数据类型学习笔记
2016/01/13 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Django中Model的使用方法教程
2018/03/07 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
68句权威创业名言
2019/08/26 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
python识别围棋定位棋盘位置
2021/07/26 Python