PyQt OpenGL: drawing simple scenes

前端 未结 2 1658
梦如初夏
梦如初夏 2020-12-14 11:58

Recently I have drawn simple scenes like triangles and polygon using PyOpenGL. The code was pretty straightforward, and use of different GL_TRIANGLES and GL_POLYGON didn\'t

相关标签:
2条回答
  • 2020-12-14 12:27

    Here's a simple working example for a python QGLWidget with a button:

    from OpenGL.GL import *
    from OpenGL.GLU import *
    from PyQt4 import QtGui
    from PyQt4.QtOpenGL import *
    
    class MainWindow(QtGui.QWidget):
        def __init__(self):
            super(MainWindow, self).__init__()
            self.widget = glWidget(self)
            self.button = QtGui.QPushButton('Test', self)
            mainLayout = QtGui.QHBoxLayout()
            mainLayout.addWidget(self.widget)
            mainLayout.addWidget(self.button)
            self.setLayout(mainLayout)
    
    class glWidget(QGLWidget):
    
        def __init__(self, parent):
            QGLWidget.__init__(self, parent)
            self.setMinimumSize(640, 480)
    
        def paintGL(self):
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
            glLoadIdentity()
            glTranslatef(-2.5, 0.5, -6.0)
            glColor3f( 1.0, 1.5, 0.0 )
            glPolygonMode(GL_FRONT, GL_FILL)
            glBegin(GL_TRIANGLES)
            glVertex3f(2.0,-1.2,0.0)
            glVertex3f(2.6,0.0,0.0)
            glVertex3f(2.9,-1.2,0.0)
            glEnd()
            glFlush()
    
        def initializeGL(self):
            glClearDepth(1.0)              
            glDepthFunc(GL_LESS)
            glEnable(GL_DEPTH_TEST)
            glShadeModel(GL_SMOOTH)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity()                    
            gluPerspective(45.0,1.33,0.1, 100.0) 
            glMatrixMode(GL_MODELVIEW)
    
    if __name__ == '__main__':
        app = QtGui.QApplication(['Yo'])
        window = MainWindow()
        window.show()
        app.exec_()
    
    0 讨论(0)
  • 2020-12-14 12:35

    I modify Ivan's answer for Pyqt version 5.

    import sys
    from OpenGL.GL import *
    from OpenGL.GLU import *
    from PyQt5 import QtGui
    from PyQt5.QtOpenGL import *
    from PyQt5 import QtCore, QtWidgets, QtOpenGL
    
    
    class Ui_MainWindow(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super(Ui_MainWindow, self).__init__()
            self.widget = glWidget()
            self.button = QtWidgets.QPushButton('Test', self)
            mainLayout = QtWidgets.QHBoxLayout()
            mainLayout.addWidget(self.widget)
            mainLayout.addWidget(self.button)
            self.setLayout(mainLayout)
    
    
    class glWidget(QGLWidget):
        def __init__(self, parent=None):
            QGLWidget.__init__(self, parent)
            self.setMinimumSize(640, 480)
    
        def paintGL(self):
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
            glLoadIdentity()
            glTranslatef(-2.5, 0.5, -6.0)
            glColor3f( 1.0, 1.5, 0.0 );
            glPolygonMode(GL_FRONT, GL_FILL);
            glBegin(GL_TRIANGLES)
            glVertex3f(2.0,-1.2,0.0)
            glVertex3f(2.6,0.0,0.0)
            glVertex3f(2.9,-1.2,0.0)
            glEnd()
            glFlush()
    
        def initializeGL(self):
            glClearDepth(1.0)              
            glDepthFunc(GL_LESS)
            glEnable(GL_DEPTH_TEST)
            glShadeModel(GL_SMOOTH)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity()                    
            gluPerspective(45.0,1.33,0.1, 100.0) 
            glMatrixMode(GL_MODELVIEW)
    
    
    if __name__ == '__main__':    
        app = QtWidgets.QApplication(sys.argv)    
        Form = QtWidgets.QMainWindow()
        ui = Ui_MainWindow(Form)    
        ui.show()    
        sys.exit(app.exec_())
    
    0 讨论(0)
提交回复
热议问题