Python多线程不适用于OpenGL

Python多线程不适用于OpenGL,python,multithreading,opengl,Python,Multithreading,Opengl,我有一个基本的OpenGL正方形绘图代码,我想用Python放另一个线程。这是正常的代码,运行良好 from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * class Drawer: def drawQuad(self, x,y,width): halfW=width/2 glBegin(GL_QUADS) glVertex3f(x-halfW,

我有一个基本的OpenGL正方形绘图代码,我想用Python放另一个线程。这是正常的代码,运行良好

from OpenGL.GLUT import *
from OpenGL.GL import *
from OpenGL.GLU import *

class Drawer:
    def drawQuad(self, x,y,width):
        halfW=width/2
        glBegin(GL_QUADS)
        glVertex3f(x-halfW, y-halfW, 0)
        glVertex3f(x-halfW, y+halfW, 0)
        glVertex3f(x+halfW, y+halfW, 0)
        glVertex3f(x+halfW, y-halfW, 0)
        glEnd()

    def display(self):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()
        glColor3f(0, 0, 1)
        self.drawQuad(0.0,0.0,0.6)
        glutSwapBuffers( )

class Visualizer:
    drawer = Drawer()
    def __init__(self):
        glutInit(sys.argv)
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
        glutInitWindowSize(250, 250)
        glutInitWindowPosition(100, 100)
        glutCreateWindow(sys.argv[0])
        glutDisplayFunc( self.drawer.display )
        glClearColor ( 0, 0, 0, 0 )
        glShadeModel( GL_SMOOTH )
        glutMainLoop()

visualizer = Visualizer()
这在我的机器上完美地工作。现在,我想把这个放在一根线上。我做了以下几件事

class Thread(threading.Thread):
    visualizer = None
    def run(self):
        self.visualizer = Visualizer()  

thread = Thread()
thread.start()
当我运行线程而不是可视化工具本身时,它不工作。OpenGL窗口不会出现。我看不出有什么问题


我尝试了
线程
和其他一些示例,它们似乎工作得很好。我有点困惑。我的OpenGL的
线程化方法有什么问题?

@ratchetfreak那么,如何在OpenGL中创建一个在使用Python运行时接受一些输入的窗口呢?我想ratchet freak的意思是,GLUT不是为线程而设的。如果您的框架允许您设置当前的OpenGL上下文,那么您可以在多线程环境中轻松使用OpenGL。上下文一次只能在单个线程中处于活动状态。理论上,
glutSetWindow(…)
可能会设置当前的渲染上下文,尽管API文档并没有这样描述。至于在单线程应用程序中从窗口获取输入,您可以使用消息泵/事件队列,40多年来一直如此;)@科尔曼你能用一小部分代码演示一下吗?