opengl嵌入pyqt5编译的分割窗口中

2023-11-02

opengl嵌入pyqt5编译的分割窗口中

向大部分商业仿真软件一样,使用opengl显示三维模型,首先需要将opengl的窗口嵌入到pyqt5编译的界面中

下面是一个小例子:

[python]  view plain  copy
  1. from PyQt5.QtGui import *  
  2. from PyQt5.QtWidgets import *  
  3. from PyQt5.QtCore import *  
  4. from PyQt5.QtOpenGL import QGLWidget  
  5. import sys  
  6. from OpenGL.GL import *  
  7.   
  8. class MainWindow(QMainWindow):  
  9.     """docstring for Mainwindow"""  
  10.     def __init__(self, parent = None):  
  11.         super(MainWindow,self).__init__(parent)  
  12.         self.basic()  
  13.         splitter_main = self.split_()  
  14.         self.setCentralWidget(splitter_main)  
  15.   
  16.     #窗口基础属性  
  17.     def basic(self):  
  18.         #设置标题,大小,图标  
  19.         self.setWindowTitle("GT")  
  20.         self.resize(1100,650)  
  21.         self.setWindowIcon(QIcon("./image/Gt.png"))  
  22.         #居中显示  
  23.         screen = QDesktopWidget().geometry()  
  24.         self_size = self.geometry()  
  25.         self.move((screen.width() - self_size.width())/2,(screen.height() - self_size.height())/2)  
  26.   
  27.     #分割窗口  
  28.     def split_(self):  
  29.         splitter = QSplitter(Qt.Vertical)  
  30.         s = OpenGLWidget()   #将opengl例子嵌入GUI  
  31.         splitter.addWidget(s)  
  32.         testedit = QTextEdit()  
  33.         splitter.addWidget(testedit)  
  34.         splitter.setStretchFactor(0,3)  
  35.         splitter.setStretchFactor(1,2)  
  36.         splitter_main = QSplitter(Qt.Horizontal)  
  37.         textedit_main = QTextEdit()  
  38.         splitter_main.addWidget(textedit_main)  
  39.         splitter_main.addWidget(splitter)  
  40.         splitter_main.setStretchFactor(0,1)  
  41.         splitter_main.setStretchFactor(1,4)  
  42.         return splitter_main  
  43.   
  44. class OpenGLWidget(QGLWidget):  
  45.     def initializeGL(self):  
  46.         glClearColor(1,0,0,1)  
  47.         glEnable(GL_DEPTH_TEST)  
  48.         glEnable(GL_LIGHT0)  
  49.         glEnable(GL_LIGHTING)  
  50.         glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)  
  51.         glEnable(GL_COLOR_MATERIAL)  
  52.   
  53.     def paintGL(self):  
  54.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)  
  55.         glBegin(GL_TRIANGLES)  
  56.         glColor3f(1.00.00.0)  
  57.         glVertex3f(-0.5, -0.50)  
  58.         glColor3f(0.01.00.0)  
  59.         glVertex3f( 0.5, -0.50)  
  60.         glColor3f(0.00.01.0)  
  61.         glVertex3f( 0.0,  0.50)  
  62.         glEnd()  
  63.   
  64.   
  65. if __name__ == "__main__":  
  66.     app = QApplication(sys.argv)  
  67.     win = MainWindow()  
  68.     win.show()  
  69.     sys.exit(app.exec_())  

运行便可以看到,opengl成功嵌入到了pyqt5的分割窗口中~

也可以将QGLWidget的类写在另一个文件中,然后再次导入文件实现

原文:https://blog.csdn.net/ydsf521/article/details/80673699
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opengl嵌入pyqt5编译的分割窗口中 的相关文章

  • OpenGL:仅使用一个帧缓冲区并切换目标纹理

    我是否可以只创建一个帧缓冲区对象并通过在需要时切换其目标纹理来实现相同的结果 而不是使用多个帧缓冲区对象 在所有情况下这都是一个坏主意吗 如果是 为什么 我一直在实现一个功能render SetTargetTexture 在我的程序的 AP
  • 3D 图形矩阵 4x4 中最后一行的 magic 4 的用途是什么?

    当我阅读有关WebGL的书时 我看到了下一个矩阵描述 有关于书中最后一行的信息 WebGL 初学者指南 初学者指南 Diego Cantor Brandon Jones 神秘的第四排 第四排没有任何特殊之处 意义 元素 m4 m8 m12
  • glDrawElements 在 PyOpenGL 中绘制立方体

    我最近开始通过 Python 学习 OpenGL 这要归功于几个教程 尤其是 Nicolas P Rougier 的教程 http www labri fr perso nrougier teaching opengl http www l
  • 将 CVPixelBuffer 渲染到 NSView (macOS)

    我有一个CVPixelBuffer我正在尝试在屏幕上有效地绘制 转变为低效率的方式NSImage可以工作 但速度非常慢 丢掉了大约 40 的帧数 因此 我尝试使用将其渲染在屏幕上CIContext s drawImage inRect fr
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 使用 openGL、SOIL 加载图像

    我尝试了很多使用 SOIL 在 openGL 中加载和显示图像的示例 运行下面的源代码时 它仅显示一个没有图像的白色四边形 我尝试打开一个名为 foto 的图像 我将图像文件放在程序的文件夹中 bool keyStates new bool
  • (定义一个宏)方便OpenGL命令调试?

    有时插入条件打印和检查需要很长时间glGetError 使用二分搜索的形式来缩小范围 其中第一个函数调用是 OpenGL 首先报告错误 我认为如果有一种方法可以构建一个宏 我可以包装所有可能失败的 GL 调用 并有条件地调用 那就太酷了gl
  • 法线在 openGL 中表现得很奇怪

    我一直在为 openGl 编写一个 obj 加载器 几何体加载得很好 但法线总是混乱的 我尝试在两个不同的程序中导出模型 但似乎没有任何效果 据我所知 这就是将法线放入 GL TRIANGLES 的方法 glNormal3fv norm1
  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • 我的绘图存在坐标/glortho 问题

    I have made a bit of a change to my code in the last couple of hours as everything was messy with my grid so I made it i
  • 使用 Qt 在 xoverlay 之上绘制

    我希望在使用 Xoverlay 渲染的视频流之上绘制一些 UI 我正在使用 gstreamer 播放视频并使用 xoverlay 在 xvimagesink 上渲染它 我的小部件继承自 QGLWidget 我希望使用 QPainter 绘制
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 在 Linux 上运行我自己的程序的权限被拒绝? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有Ubuntu 9 4 我已经构建了程序 一些基本的 OpenGL 该程序只是制作一个旋转的正方形 然后运行它并 sh blabla p

随机推荐

  • html元素_1.02

    HTML 元素 HTML 文档由 HTML 元素定义 HTML 元素 开始标签 元素内容 结束标签 p 这是一个段落 p a href default htm 这是一个链接 a br 换行 开始标签常被称为起始标签 opening tag
  • 【自然语言处理】基于句子嵌入的文本摘要算法实现

    基于句子嵌入的文本摘要算法实现 人们在理解了文本的含义后 很容易用自己的话对文本进行总结 但在数据过多 缺乏人力和时间的情况下 自动文本摘要则显得至关重要 一般使用自动文本摘要的原因包括 减少阅读时间 根据摘要 选择自己想研究的文档 提高索
  • 正在搜索“字节跳动面经”?这次,让校招面试官亲自为你划重点!

    题解 自动售货系统 GOOD DANJIA 0GOOD COUNTS 1goods A1 2 0 A2 q 题解 交换变量值 import java util Scanner public class Main public static
  • 用c++编写一个简单的员工管理系统

    文章目录 题目要求 一 设计思路 二 具体程序 总结 题目要求 高校工资管理系统 现一高校有五类职工 教师 实验员 行政人员 教师兼职实验员 行政人员兼 职教师 为了实现工资发放的自动功能 现要求编写程序来自动完成此功能 任意职工的 工资查
  • Windows批处理脚本:ffmpeg转换b站m4n视频

    1 M4S格式转为MP3格式 echo off set filename n1 set newfilename filename mp3 ffmpeg i 1 f mp3 vn newfilename 2 两个M4S格式合并视频 echo
  • Visual C++ 2010如何解决程序运行闪退问题

    使用Visual C 调试C语言控制台程序 一直出现程序正常运行结束就闪退 看不到控制台的的运行结果 经过查资料尝试 得到几种解决方法 1 在return 0 前面加上getchar 利用getchar 函数等待输入 直到按回车才结束的性质
  • 6款热门的SpringCloud微服务开源项目,总有适合你的

    今天介绍六款比较热门的SpringCloud微服务项目 感兴趣的可以clone下来研究一下 相信对你学习微服务架构很有帮助 一 Cloud Platform 介绍 Cloud Platform是国内首个基于Spring Cloud微服务化开
  • Echarts的一些配置

    前言 在此记录echarts使用过程中的一些配置 开始 一 整体使用 以一个环形图为例 html div div js部分 drawChart list let myChart this echarts init document getE
  • 2021-07-19王汕7.19国际黄金今日行情资讯分析,期货原油伦敦金投资操作建议

    黄金行情走势分析 周一 7月19日 现货黄金小幅上涨 上周五 7月16日 金价跌近1 主要因为零售销售意外增长提振美元指数上涨 不过消费者信心指数下跌以及股市下滑限制了金价跌势 黄金守在每盎司1800美元上方 但分析师表示 一个关键驱动因素
  • js随机生成16进制颜色值

    js随机生成16进制颜色值 背景 很多情况下 我们会遇到给某个dom设置随机颜色 这里采用js函数直接生成 并返回随机16进制颜色值 function getRandomColor var str var arr 0 1 2 3 4 5 6
  • Java中绕过SSL/TLS验证:开发与风险透视

    警告 本文提供的方法绕过SSL TLS证书验证 这在某些开发场景下可能是有用的 但使用这些方法会导致严重的安全隐患 在生产环境中 你应该始终验证SSL TLS证书以确保数据的安全传输 引言 在日常的软件开发中 我们经常需要与其他服务进行HT
  • C++中随机函数rand()和srand()的用法

    一 rand 函数名 rand 功 能 随机数发生器 用 法 int rand void 所在头文件 stdlib h 函数说明 rand 的内部实现是用线性同余法做的 它不是真的随机数 因其周期特别长 故在一定的范围里可看成是随机的 ra
  • 第6章-selenium的使用+iframe+图形验证码

    第6章 selenium的使用 iframe tesseract 一 ajax基本介绍 1 ajax 2 获取ajax数据的方式 二 selenium 1 selenium介绍 2 PhantomJS常用语法 3 selenium的使用 3
  • 搭建Vue-Cli以及创建Vue项目

    搭建Vue Cli脚手架 前言 搭建脚手架需要node js的支持 所以先安装node js 1 安装node js 图片 双击打开 上图程序 一直点击下一步 待安装完成 2 安装npm 1 打开cmd命令 输入node v 查看node安
  • [shell] awk 获取指定IP对应的网口

    awk 获取指定IP对应的网口 引子 awk简介 语法规则 实例解析 awk 处理流程 命令解析 还没结束 思考 参考 引子 项目中需要根据 Linux主机 IP 地址获取其对应网口名称 如 IP地址为192 168 130 12 其对应的
  • SQL笔记(1)——MySQL创建数据库(收藏吃灰版)

    本文详细记录MySQL创建一个数据库的过程 不只是构建步骤 更多的是每一步涉及到的知识点 一般创建数据库有两种方式 一种是命令 另外一种就是通过数据库管理工具 本文主要记录通过命令的方式创建 后面的学习也都是基于这个数据库进行的 场景 创建
  • React中的条件渲染

    React中的条件渲染 Vue js中使用v if v else实现模板中的条件渲染 小程序中使用wx if wx else实现模板中的条件渲染 React中没有模板 即不需要v if 也没有指令系统 即没有v if 条件渲染需要手工实现
  • Springboot整合Mybatis之数据源配置

    spring datasource driver class name com mysql cj jdbc Driver spring datasource url jdbc mysql localhost 3306 springboot
  • androidstudio3.0解决gradle plugin 和android_apt不兼容问题

    将项目下的 classpath com neenbedankt gradle plugins android apt 1 8 删掉 和modul下的apply plugin com neenbedankt android apt 删掉 ap
  • opengl嵌入pyqt5编译的分割窗口中

    opengl嵌入pyqt5编译的分割窗口中 向大部分商业仿真软件一样 使用opengl显示三维模型 首先需要将opengl的窗口嵌入到pyqt5编译的界面中 下面是一个小例子 python view plain copy from PyQt