Python 如何使用PyQt5设置PyOpenGL?

Python 如何使用PyQt5设置PyOpenGL?,python,pyqt5,pyopengl,Python,Pyqt5,Pyopengl,我想用python建立几个3D数学项目。我能看到的最好的渲染方法是使用PyOpenGL。我还想在PyQt5中运行它,这样我就可以在渲染时使用GUI了。我能找到的所有信息都是使用PyGame或QtDesigner。我想在没有设计师的情况下工作。有人知道我在哪里可以找到关于如何设置的教程吗 编辑: 我设法完成了一些网络搜索。我在作者请求帮助的地方找到了以下代码,关于它没有运行。他说了以下几点: 我对python非常陌生。我的代码有一个问题,它是一个非常简单的旋转立方体。我对pygame屏幕上的这个立

我想用python建立几个3D数学项目。我能看到的最好的渲染方法是使用PyOpenGL。我还想在PyQt5中运行它,这样我就可以在渲染时使用GUI了。我能找到的所有信息都是使用PyGame或QtDesigner。我想在没有设计师的情况下工作。有人知道我在哪里可以找到关于如何设置的教程吗

编辑:

我设法完成了一些网络搜索。我在作者请求帮助的地方找到了以下代码,关于它没有运行。他说了以下几点:

我对python非常陌生。我的代码有一个问题,它是一个非常简单的旋转立方体。我对pygame屏幕上的这个立方体代码没有任何问题,但当我将它与pyqt(或Qt设计器小部件)一起使用时,它会运行,但不会显示任何内容

我将他的代码复制到我的IDe中,然后将其保存为
cubes.py
。我在文件的目录中打开了一个CMD实例并调用它。它在屏幕中央打开了一个小的黑色QT窗口:

当我试图通过拖动角点来调整窗口大小时,它会抛出一个深度回溯:

  File "C:\Users\aweso\Documents\Python\cubes\cubes.py", line 1, in <module>
    from OpenGL.GL import *
ModuleNotFoundError: No module named 'OpenGL'

C:\Users\aweso\Documents\Python\cubes>cubes.py
Traceback (most recent call last):
  File "C:\Users\aweso\Documents\Python\cubes\cubes.py", line 56, in paintGL
    glEnd()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\OpenGL\latebind.py", line 63, in __call__
    return self.wrapperFunction( self.baseFunction, *args, **named )
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\OpenGL\GL\exceptional.py", line 45, in glEnd
    return baseFunction( )
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\OpenGL\platform\baseplatform.py", line 415, in __call__
    return self( *args, **named )
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\OpenGL\error.py", line 234, in glCheckError
    baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
        err = 1280,
        description = b'invalid enumerant',
        baseOperation = glEnd,
        cArguments = ()
)

我曾经使用PyOpenGL和PyQt5开发了一个交互式3D程序。 这是当时的密码。 我希望这能对你有所帮助

导入系统 输入数学 从数组导入数组 从OpenGL导入 从PyQt5.QtCore导入pyqtSignal、QPoint、QSize、Qt 从PyQt5.QtGui导入QColor、QImage 从PyQt5.QtWidgets导入(QApplication、QHBoxLayout、QWidget) 从PyQt5.QtOpenGL导入QGLWidget 从着色器导入着色器程序 类窗口(QWidget): 定义初始化(自): 超级(窗口,自我)。\uuuu初始化 self.glWidget=glWidget() mainLayout=QHBoxLayout() mainLayout.addWidget(self.glWidget) self.setLayout(主布局) self.setWindowTitle('Hello') 类GLWidget(QGLWidget): def uuu init uuu(self,parent=None): super(GLWidget,self)。\uuuuu init\uuuuuuu(父级) def sizeHint(自身): 返回QSize(1200,1000) def初始化EGL(自身): GL.glClearColor(0.0,0.0,1.0,0.0)#这也是可能的。 glEnable总包(总包深度测试) #GL.glEnable(GL.GL\u顶点\u阵列) self.\u createVertexBuffer() self.program=ShaderProgram('hello.vert','hello.frag')) self.program.use() self.frontTexture=self.\u createTexture('tex.png')) self.backTexture=self.\u createTexture('back-tex.jpg')) #设置纹理单位 GL.glActiveTexture(GL.GL\U纹理0) GL.glBindTexture(GL.GL_纹理_2D,self.frontTexture) glUniform1i(GL.glGetUniformLocation(self.program.getProgram(),b'frontTexture'),0) GL.glActiveTexture(GL.GL\U纹理1) GL.glBindTexture(GL.GL\u纹理\u 2D,self.backTexture) glUniform1i(GL.glGetUniformLocation(self.program.getProgram(),b'backTexture'),1) def paintGL(自我): GL.glClear(GL.GL_颜色_缓冲_位| GL.GL_深度_缓冲_位) 赛尔夫 def resizeGL(自身、宽度、高度): 侧面=最小值(宽度、高度) 如果边<0: 返回 GL.glViewport((宽度-侧面)//2,(高度-侧面)//2,侧面,侧面) def_createTexture(self,texFilePath): qImage=qImage(texFilePath) 纹理=QGLWidget.bindTexture(self、qImage、GL.GL\u纹理\u 2D、GL.GL\u RGBA) GL.glGenerateMipmap(GL.GL_纹理_2D) 返回纹理 def_createVertexBuffer(自): 顶点=数组('f',[-1.0,-1.0,0.0,1.0,-1.0,0.0,1.0,1.0,0.0])。tobytes() 颜色=数组('f',[1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0])。tobytes() 指数=[0,1,2,0,3,2] texCoords=array('f',[0.0,0.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0])。tobytes() self.vertices=顶点 self.colors=颜色 self.index=索引 self.texCoords=texCoords def_牵引(自): GL.GlenableVertexAttributeArray(0) GL.GlenableVertexAttributeArray(1) GL.GlenableVertexAttributeArray(2) GL.glVertexAttribute指针(0,3,GL.GL\u浮点,GL.GL\u假,0,self.vertex) GL.glvertexattributepointer(1,3,GL.GL\u浮点,GL.GL\u假,0,self.colors) GL.glvertexattributepointer(2,2,GL.GL\u FLOAT,GL.GL\u FALSE,0,self.texCoords) GL.GL元素(GL.GL_三角形,6,GL.GL_无符号整数,自索引) GL.glDisableVertexAttribute数组(0) GL.glDisableVertexAttribute数组(1) GL.glDisableVertexAttributeArray(2) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplication(sys.argv) window=window() window.show() sys.exit(app.exec_())
感谢您发布代码!当我有机会的时候,我会把它挖出来。这是5年前的密码。但当我今天在Ubuntu 18.04上运行它时,它运行得很好。祝你好运。着色器程序的用途是什么?我可以在没有它的情况下运行GL渲染吗?我在上面使用了一些着色器程序(Python+OpenGL)。你可以用Python做任何事情,就像C++一样。