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

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

下面是一个小例子:

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

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

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

原文:https://blog.csdn.net/ydsf521/article/details/80673699

opengl嵌入pyqt5编译的分割窗口中相关推荐

  1. 自定义UserControl的属性为什么不能在设计时显示在属性窗口中

    自定义UserControl的属性为什么不能在设计时显示在属性窗口中 自定义UserControl的属性为什么不能在设计时显示在属性窗口中 http://www.cnblogs.com/dudu/ar ...

  2. QWidget子窗口中setStyleSheet无效,解决方法

    QWidget子窗口中setStyleSheet无效,解决方法 参考文章: (1)QWidget子窗口中setStyleSheet无效,解决方法 (2)https://www.cnblogs.com/ ...

  3. 【java】swing窗口中的JOptionPane类及字符串转其他数据类型的应用

    swing窗口中的JOptionPane类及字符串转其他数据类型的应用 代码清单: package p1; //*********Found********** import javax.swing. ...

  4. 【java】swing窗口中JPanel和JFrame的应用

    swing窗口中JPanel和JFrame的应用:程序的功能是在JFrame窗口中输出一条语句,并且保证能够退出窗口. 代码清单 如下: package p1; import javax.swing. ...

  5. 如何在终端窗口中在Linux中创建文件?

    本文翻译自:How to create a file in Linux from terminal window? 在Linux终端中创建文件最简单的方法是什么? #1楼 参考:https://sta ...

  6. 如何使scrapy爬取信息不打印在命令窗口中

    通常,我们使用这条命令运行自己的scrapy爬虫: scrapy crawl spider_name 但是,由这条命令启动的爬虫,会将所有爬虫运行中的debug信息及抓取到的信息打印在运行窗口中.很乱 ...

  7. PowerBuilder 输入框中输入完数据 按回车把相应的数据显示在数据窗口中

    文本框回车搜索 代码片. string ls_sql_old //老的SQL string ls_sql_where //条件 string ls_sql_new //新的SQL string ls_ ...

  8. AfxWnd42 qq2006中怎样取得发送消息窗口中的Richedit

    qq2006中怎样取得发送消息窗口中的Richedit 2006-11-10 02:20hzp997 | 分类:Windows | 浏览1695次 学习编程中想让程序可以自动在QQ的发送消息框中自动发 ...

  9. 【红宝书】OpenGL Demo code编译与运行

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. [红宝书]OpenGL Demo code编译与运行 文章 ...

最新文章

  1. 3.1.1蛮力法之选择排序
  2. 机器学习:范数及代码实现
  3. 02.德国博士练习_01_cluster_install
  4. .NET Core 下使用 Kafka
  5. djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!...
  6. 【OpenCV 例程200篇】97. 反谐波平均滤波器
  7. 管理感悟:软件公司不加班还搞什么软件
  8. java实现GBK与UTF8的相互转换
  9. NATS 分布式消息队列系统
  10. 如何在Java中将Excel(XLSX)转换为Word(DOCX)
  11. 【数字信号处理】基于DFT的滤波系列4之加窗(含MATLAB代码)
  12. ThinkPHP3.2.3 实现微信小程序微信授权登录
  13. opencv python 多张jpg图片转成avi视频
  14. 什么是脏读、不可重复读、幻读?别说你不知道
  15. 互斥事件的概念和公式_专题49 互斥事件和独立事件的概率及条件概率(打包)-2019年高考数学(理)名师揭秘之一轮总复习...
  16. Find命令搭配atime/ctime/mtime时的日期写法
  17. Ubuntu IBM T43的显卡驱动安装
  18. 获得研究生学历的6种方式
  19. 报税系统服务器地址怎么填,报税上海服务器地址
  20. 米思齐学习例程(八):声控灯

热门文章

  1. 开机秒全国99%电脑 实战UEFI安装Win8
  2. XSLT - 利用template实现for循环
  3. java多线程测试框架(含入参和返回值)
  4. 我眼中未来的计算机作文600字,我的电脑作文600字
  5. junit5_使用Junit测试名称
  6. quasar_Quasar和Akka –比较
  7. 使用MOXy 2.5.1快速且有点脏的JSON模式生成
  8. sizebox模型下载_彻底弄懂CSS盒模型BoxModel
  9. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统
  10. php对连接加密后传,PHP 加密解密和解决URL传输问题