第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例

使用openGL绘制图形显示在pyqt建立的ui界面中 使用openGL绘制图形显示在pyqt建立的ui界面中,一种方法是使用widget对象,将widget提升成自定义成openglwidget显示openGL的图像。 1.安装pyqt、qtdesigner.exe、pyuic.exe工具。 qtdesigner.exe可以像QT的IDE一样,拖拽生成操作界面(所见即所得的界面生成工具)。 pyuic.exe可以把界面的.ui文件转化为py文件。 安装 pyQt5 和 pyQt5-tool, 直接使用 pip 或者 conda 安装就行. 设置好pycharm 阅读详情
AI摘要

本文详细介绍如何使用PyQt中的QOpenGLWidget部件显示2D图片,包括子类化实现、构造方法、paintGL方法及界面派生类的实现。

一、概述

OpenGL Widget部件是一个OpenGL(Open Graphics Library,开放图形库)图形渲染的部件,可以在PyQt和Qt的应用中显示图形(包括2D和3D图形),对应类为 QOpenGLWidget 。在Designer中,该部件没有任何独有属性,都是继承的QWidget的属性。

二、QOpenGLWidget的使用

由于本人对OpenGL没有任何研究,因此相关概念在此不进行介绍,在此根据官网给的文档说明及自己的验证测试,介绍使用QOpenGLWidget显示2D图片的实现方式,对于3D图片的,在此不进行介绍。

由于要使得QOpenGLWidget进行2D图片展示,必须在QOpenGLWidget对象中对图片进行渲染,有多种方法来实现,从QOpenGLWidget派生子类是最简单的方法。派生子类后,通过如下两种方法都可以实现图片的渲染:

  • 在paintGL()中实现渲染:
    paintGL方法是QOpenGLWidget对象进行界面刷新(如调整大小、第一次show或者调用update方法)时都会调用的方法,因此可以重写paintGL()方法实现图片的渲染。
  • 在paintEvent()中实现渲染:paintEvent是通用的PyQt渲染事件的处理方法,在QOpenGLWidget对象中也同样处理。

需要注意:

  • 以上2种方法在2D图片渲染时都可以使用,但3D图片渲染只能使用第一种方法
  • 渲染2D图片时,可以通过openGL函数渲染,也可以使用QPainter来实现渲染。由于本人对openGL函数不熟悉,本文中使用QPainter来实现渲染,步骤是先构建QPainter对象,然后使用QPainter的方法绘制基本体,最后调用QPainter.end()方法 。

三、使用QOpenGLWidget绘制2D图片案例

3.1、案例说明

在一个PyQt窗口中的指定位置使用QOpenGLWidget展示图片,由于选择QOpenGLWidget子类化来实现渲染,因此不能直接在窗口中放置QOpenGLWidget部件,需要代码来实现QOpenGLWidget部件的子类,并在界面类中将QOpenGLWidget部件的子类对象放置到界面类中指定位置。

3.2、ui设计

在这里插入图片描述
其中graphicFrame用于作为放置QOpenGLWidget对象的容器,事先布局在窗口中。

3.2、QOpenGLWidget子类化
  1. 子类中实现构造方法、paintGL方法
    构造方法中可以直接传入要加载的图片文件名,也可以不传
  2. 提供一个加载图片文件的外部接口方法loadPicFile,这是因为 QOpenGLWidget并没有直接加载图片的方法,需要在子类中实现。loadPicFile只是将图片文件加载到内存,并不进行渲染

具体类代码如下:

class grahicOpenGL(QtWidgets.QOpenGLWidget):
    def __init__(self,parent = None,picFile=None):
        super().__init__(parent)
        self.img = None
        self.picFile = None
        if picFile:self.loadPicFile(picFile)

    def loadPicFile(self,picFile):
        self.picFile = picFile
        self.img = QtGui.QImage()
        self.img.load(picFile)

    def paintGL(self):
        if self.img:
            paint = QtGui.QPainter()
            paint.begin(self)
            paint.drawImage(QtCore.QPoint(0,0),self.img)
            paint.end()

3.3、实现界面派生类

界面派生类的构造方法中除了完成常规的界面派生类处理外,还主要完成将QOpenGLWidget子类grahicOpenGL对象的位置放置,并判断在该位置是否设置了布局,如果没有设置布局还需要进行布局处理。

3.4、运行截图

在这里插入图片描述

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

PyQt的OpenGL Widget部件:功能介绍与图片显示 在上面的代码中,我们定义了一个名为MyGLWidget的类,它继承自OpenGL的QGLWidget类。其中,OpenGL Widget部件是PyQt中的一个重要组成部分,它提供了在Qt应用程序中显示OpenGL渲染结果的能力,从而使开发者可以通过OpenGL渲染实现更加绚丽的界面效果。最后,通过运行这个应用程序,您就可以在窗口中看到我们加载的图片,同时也可以通过OpenGL来实现更加复杂的图形效果。本文将介绍如何使用PyQt中的OpenGL Widget部件来显示图片,并提供相应的源代码示例。 阅读详情

相关推荐

PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片 Python

在PyQt中,OpenGL Widget部件是一个强大的部件,它提供了在应用程序中显示和操作OpenGL图形的功能。在OpenGLWidget的paintEvent方法中,我们创建了一个QPainter对象,并使用QImage加载指定路径的图像。在上面的代码中,我们首先导入了必要的模块。在类的构造函数中,我们接受一个image_path参数,该参数指定要显示的图像的路径。通过使用PyQt的OpenGL Widget部件,我们可以轻松地将OpenGL渲染的图形嵌入到PyQt应用程序中,并与其他部件进行交互。

code_welike的博客 1282

QT中的OpenGLWidget

QT中的OpenGLWidget

m0_60259116的博客 3294

【OpenGL概念】QOpenGLWidget类详述--此文档基于Qt5.14.2

QOpenGLWidget提供了在Qt应用程序中显示集成OpenGL图形的功能。使用它非常简单:让您的类继承它,并像使用任何其他QWidget一样使用子类,除了您可以选择使用QPainter和标准OpenGL渲染命令之间的区别。

gongdiwudu的专栏 6015

PyQt5 通过 OpenGLWidget 控件显示 3D 网格

PyQt5 通过 OpenGLWidget 控件显示 3D 网格。

qq_51189182的博客 2449

西工大noj100题python2024第三季21-30

【代码】西工大noj100题python2024第三季21-30。

weixin_70523540的博客 1580

3个PLC进阶教程实战项目,学完立即接私单!

此处应插入清晰的硬件电路图,包含土壤湿度传感器、水泵、PLC的输入输出端子,并标注清晰的接线方式。同样的,也需要插入清晰的梯形图,用简单的逻辑表达控制过程,比如:土壤湿度传感器信号低于设定值 -> PLC输出信号 -> 水泵启动。我是老王,一个在自动化行业摸爬滚打多年的老工程师,今天咱们不聊那些枯燥的理论,直接上手三个PLC进阶实战项目,学完保证你信心满满,立马就能接私单!想想你家里的空调,它也是通过检测室温,并根据设定的温度进行制冷或制热,这个项目就是类似的原理。

qq_38220914的博客 1476

Qt5使用openGL,进行3d绘图

https://blog.csdn.net/qq_35703848/article/details/79819854   1、 1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QOpenGLWindow> 6 #include <QOpen...

weixin_30367543的博客 841

软件工程:数据字典

数据字典

永远怀着至诚之心拥抱世界 4279

Qt开发入门:从零到跨平台GUI低手

Qt开发入门:从零到跨平台GUI低手

Yusei_0523的博客 668

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6460

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。

视觉与物联智能 2121

QT跨平台开发框架安装与配置全指南

QT作为跨平台C++ GUI开发框架,通过其强大的信号槽机制和元对象系统实现高效界面开发。其核心价值在于一次编写多平台部署的能力,大幅降低Windows、Linux和macOS多平台适配成本。开发者在工业控制、嵌入式系统和金融交易等领域广泛应用QT框架时,首先需要完成正确的环境安装与配置。本文以QT 5.15.2为例,详细解析Windows平台MSVC编译环境配置、Linux下gcc工具链集成以及macOS的Xcode环境准备等关键技术要点,特别针对国内开发者提供了清华镜像源加速方案。通过正确配置QTDIR

weixin_34234721的博客 435

OpenCV简单应用:图像模糊处理

OpenCV是一个广泛使用的开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法。本文将介绍如何使用OpenCV对图像进行模糊处理,并提供相应的源代码。该函数接受两个参数:第一个参数是输入图像,第二个参数是指定模糊核大小的元组。在这个例子中,我们使用了一个5x5的模糊核。您可以尝试不同大小的模糊核,以获得不同程度的模糊效果。函数和指定不同大小的模糊核,我们可以实现不同程度的模糊效果。该函数接受两个参数:第一个参数是窗口的名称,第二个参数是要显示的图像。在上面的代码中,我们首先使用。要运行上述代码,请将。

MwgmPhilosophy的博客 290

QOpenGLWidget

QOpenGLWidget 类是一个用于渲染 OpenGL 图形的小部件。QOpenGLWidget 提供了显示集成到 Qt 应用程序中的 OpenGL 图形的功能。它使用起来非常简单:自定义类继承它并像其他 QWidget 子类一样使用,还可以选择使用 QPainter 和标准 OpenGL 渲染命令。QOpenGLWidget 提供了三个方便的虚函数,可以在子类中重新实现这些虚函数来执行典型的 OpenGL 任务:paintGL():渲染 OpenGL 场景,每当需要更新小部件时调用。

hw5230的博客 3206

Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

LocalPort”是PLC的端口,最终的设置如下图所示:(相关的设置都可以查看帮助文档)P#DB1.DBX0.0 BYTE28是以指针形式表示的DB1的DBX0.0开始(在使用的西门子Modbus tcp的程序块中设置的“MB_HOLD_REG”输出寄存器),其有28个字节(28个字节对应14个寄存器),4001是第一个寄存器,往后数14个即可。在上面的基础上,增加一个“DB1”的“组对象”,同时将“MW0”的组对象禁止(双击组对象,“Active”取消勾选),启动之后发现无法连接。

分享学习成长历程,Winter is coming! 1万+

RK3588 部署 YOLO26 目标检测:从训练到 NPU 推理

如果做垂直场景(工业缺陷、农作物、特定零件),需要自己标数据。采集图像(500+ 张,覆盖不同光照/角度)→ 筛选(删除模糊/无目标)→ LabelImg 标注(选择 YOLO 格式)→ 划分(train:val:test = 7:2:1)labelImg├── train/├── val/├── test/YOLO26 在 RK3588 上的全流程是 PC 端训练 + ONNX 导出 → RKNN 转换(INT8 量化)→ 板端推理。

m0_71589036的博客 110

【Qt 应用开发】入门QOpenGLWidget的第一站:绘制文字的多种方法实践

OpenGL(Open Graphics Library,开放图形库)作为一种跨平台的图形API(Application Programming Interface,应用程序编程接口),为我们提供了访问图形硬件的底层接口。而在 Qt 框架中,`QOpenGLWidget` 提供了一个便捷的途径,将这些强大的渲染能力融入到传统的 GUI(Graphical User Interface,图形用户界面)应用程序中。它不仅是技术的融合,更是艺术与科技结合的体现。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4532

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

实战PyQt5: 088-QOpenGLWidget部件

QOpenGLWidget简介 QOpenGLWidget类是用于渲染OpenGL图形的部件。QOpenGLWidget提供了用于显示集成到Qt应用程序中的OpenGL图形的功能。使用非常简单:让应用的类继承自它,并像使用其他任何QWidget一样使用子类,而且它可以在使用QPainter和标准OpenGL渲染命令之间进行选择。 QOpenGLWidget提供了三个函数,在子类中重新实现它们就可以执行一个典型的OpenGL任务: paintGL() 渲染OpenGL场景。在部件需要更新时就会调用它。

seniorwizard的专栏 7117

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OpenGL: QOpenGLWidget和QOpenGLFunctions_X_X_Core的使用 (五)

OpenGL: QOpenGLWidget和QOpenGLFunctions_X_X_Core的使用 (五)

青春有梦,且行且学习! 2018

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

QWidget绘图与QOpenGLWidget绘图

cpu绘图及gpu绘图

weixin_41377572的博客 1637

使用QOpenGLWidget(调用GPU)渲染QImage加载的图片

OpenGL是一个用来加速渲染显示2D、3D 矢量图形的编程接口。这个接口底层依赖于硬件GPU,底层硬件接口的驱动都是由GPU厂家提供。openGl也支持跨平台,windows、Linux、MAC 平台都可以使用。QT封装有QOpenGLWidget可以更加方便的调用GPU 来渲染图片。下面例子代码就介绍QOpenGLWidget类的使用说明,并编写一个例子代码,调用GPU加速渲染一张QImage加载的图片。QOpenGLWidget类是一个用于呈现OpenGL图形的小部件。

hw5230的博客 6976

实战PyQt5: 159-使用OpenGL加速图表绘制

在图表中的数据点很多的时候,比如有多个图表,每个图表的的数据点达到几万甚至到10万的时候,不使用GPU加速,渲染速度明显变慢,QChart提供了使用OpenGL进行图表渲染加速,在下面的测试中,我们可以看到,使用 OpenGL进行渲染加速,图表渲染的FPS(每秒帧率)会有数量级的提高。...

seniorwizard的专栏 3592

Qt基于QOpenGLWidget使用OpenGL函数

选择QOpenGLWidget基类的initializeGL, resizeGL, paintGL 这三个虚函数然后点击OK。在OPENGL初始化函数与OPENGL绘制函数中进行数据初始化及绘制工作。7.使用基于QOpenGLWidget生成的窗口类。5.添加头文件并继承类QOpenGLWidget。6.重写基类三个OpenGL函数。1.创建QWidget应用。3.输入类型,点击下一步。2.右击工程添加文件。4.点击完成,将创建类。

1215

基于Qt的OpenGL(一):OpenGL理论及QOpenGLWidget

框架:OpenGL3.3、Qt 5.12.3MinGW(3.2以前是传统模式(固定管线模式-已被丢弃),3.3是现在模式(可编程管线)) 优势:安装简单,Qt已经封装好了,如GLFW和GLAD。自己有支持OpenGL的窗口。 介绍:OpenGL是Open Graphics Library的缩写,它是由Khronos组织制定并维护的一个规范。OpenGL的核心库是用C语言编写,但同时也支持多种语言的派生。 核心模式:3.3以后版本新推出的模式,也叫现在模式或可编程模式。 GPU渲染是一个流水线:比如输入一大

认真努力,做一只会飞的毛毛虫。 9465

QGLWidget,QOpenGLWidget和QOpenGLWindow简介

值得注意的是,initializeGL() 函数仅在第一次显示窗口部件或者第一次更改OpenGL上下文时被调用,如果窗口部件需要重新初始化,需要调用makeCurrent()函数将当前上下文设置为null再重新调用initializeGL()函数。在这个函数中,可以编写OpenGL初始化代码,完成对OpenGL状态的配置和资源的创建。值得注意的是,paintGL() 函数不会在窗口部件刚刚创建时被调用,因此在这个函数中不应该进行任何初始化工作,而应该在initializeGL() 函数中进行。

m0_57236802的博客 5250
上一篇: 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片
下一篇: 第四十章、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值