3D GUI in python
import pyglet
from pyglet.gl import *
from pyglet.window import key
from OpenGL.GLUT import *
WINDOW   = 400
INCREMENT = 5
class Window(pyglet.window.Window):
   # Cube 3D start rotation
   xRotation = yRotation = 30  
   def __init__(self, width, height, title=''):
       super(Window, self).__init__(width, height, title)
       glClearColor(0, 0, 0, 1)
        glEnable(GL_DEPTH_TEST)  
   def on_draw(self):
       # Clear the current GL Window
       self.clear()
       # Push Matrix onto stack
       glPushMatrix()
       glRotatef(self.xRotation, 1, 0, 0)
       glRotatef(self.yRotation, 0, 1, 0)
       # Draw the six sides of the cube
       glBegin(GL_QUADS)
       # White
       glColor3ub(255, 255, 255)
       glVertex3f(50,50,50)
       # Yellow
       glColor3ub(255, 255, 0)
       glVertex3f(50,-50,50)
       # Red
       glColor3ub(255, 0, 0)
       glVertex3f(-50,-50,50)
       glVertex3f(-50,50,50)
       # Blue
       glColor3f(0, 0, 1)
       glVertex3f(-50,50,-50)
         # <… more color defines for cube faces>
       glEnd()
       # Pop Matrix off stack
       glPopMatrix()
   def on_resize(self, width, height):
       # set the Viewport
       glViewport(0, 0, width, height)
       # using Projection mode
       glMatrixMode(GL_PROJECTION)
       glLoadIdentity()
       aspectRatio = width / height
       gluPerspective(35, aspectRatio, 1, 1000)
       glMatrixMode(GL_MODELVIEW)
       glLoadIdentity()
       glTranslatef(0, 0, -400)
   def on_text_motion(self, motion):
       if motion == key.UP:
            self.xRotation -= INCREMENT
       elif motion == key.DOWN:
           self.xRotation += INCREMENT
       elif motion == key.LEFT:
           self.yRotation -= INCREMENT
       elif motion == key.RIGHT:
           self.yRotation += INCREMENT
            
if __name__ == '__main__':
   Window(WINDOW, WINDOW, 'Pyglet Colored Cube')
   pyglet.app.run()Copy