2015-10-18 175 views
4

最近,我使用PyOpenGL繪製了三角形和多邊形等簡單場景。代碼非常簡單,使用不同的GL_TRIANGLES和GL_POLYGON並沒有提出任何問題。PyQt OpenGL:繪製簡單場景

之後,我決定將GUI添加到我的應用程序並下載pyqt4。 所以現在我從那裏使用QtOpenGL,並且卡住了。 閱讀了幾篇教程後,我可以執行的一件事是this。下面是代碼:X

import sys 
import math 

from PyQt4 import QtCore, QtGui, QtOpenGL 

try: 
    from OpenGL import GL 
except ImportError: 
    app = QtGui.QApplication(sys.argv) 
    QtGui.QMessageBox.critical(None, "OpenGL hellogl", 
      "PyOpenGL must be installed to run this example.") 
    sys.exit(1) 


class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 

     self.glWidget = GLWidget() 
     self.button = self.createButton() 

     mainLayout = QtGui.QHBoxLayout() 
     mainLayout.addWidget(self.glWidget) 
     mainLayout.addWidget(self.button) 

     self.setLayout(mainLayout) 

     self.setWindowTitle("Hello GL") 
    def createButton(self): 
     button = QtGui.QPushButton("&WOOF") 
     button.clicked.connect(self.close) 
     return button 



class GLWidget(QtOpenGL.QGLWidget): 
    def __init__(self, parent=None): 
     super(GLWidget, self).__init__(parent) 

     self.trolltechPurple = QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0) 

    def minimumSizeHint(self): 
     return QtCore.QSize(100, 300) 

    def sizeHint(self): 
     return QtCore.QSize(400, 400) 


    def initializeGL(self): 
     self.qglClearColor(self.trolltechPurple.dark()) 

    def paintGL(self): 
     GL.glMatrixMode(GL.GL_MODELVIEW) 
     GL.glLoadIdentity() 
     GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) 
     GL.glColor3f(1,0,0) 
     GL.glRectf(-1,-1,1,0) 
     GL.glColor3f(0,1,0) 
     GL.glRectf(-1,0,1,1) 
     GL.glBegin(GL_TRIANGLES) 
     glVertex2f(3.0, 3.0) 
     glVertex2f(5.0, 3.0) 
     glVertex2f(5.0, 5.0) 
     glVertex2f(6.0, 4.0) 
     glVertex2f(7.0, 4.0) 
     glVertex2f(7.0, 7.0) 
     glEnd() 
     GL.glFinish() 



if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

當試圖使用,例如GL_TRIANGLES,我有這樣的錯誤:

NameError: global name 'GL_TRIANGLES' is not defined 

也許我還沒有看夠身邊,但我沒有找到任何解決方案

所以我的問題是如何在我的QGLWidget中繪製不同的數字。

感謝您的幫助。

回答

4

這裏有一個按鈕

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

大加讚賞,鯨先生爲蟒蛇QGLWidget來繪圖一個簡單的工作示例! – alyona