2012-04-17 10 views
16

Sto cercando di imparare le basi della programmazione del gioco e ho installato pygame e pyopengl per quello.PyOpenGL TypeError: L'oggetto 'NoneType' non è richiamabile

mycode:

import sys 
import OpenGL 

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

def draw(): 
     glClear(GL_COLOR_BUFFER_BIT) 
     glutWireTeapot(0.5) 
     glFlush() 

glutInit(sys.argv) 
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) 
glutInitWindowSize(250, 250) 
glutInitWindowPosition(100, 100) 
glutCreateWindow("Python OGL Program") 
glutDisplayFunc(draw) 
glutMainLoop() 

draw() 

Quando eseguo il codice di cui sopra nel mio prompt dei comandi utilizzando

python test.py 

ottengo il seguente errore.

Traceback (most recent call last): 
    File "test.py", line 13, in <module> 
    glutInit(sys.argv) 
    File "C:\Python27\lib\site-packages\pyopengl-3.0.2a5-py2.7.egg\OpenGL\GLUT\special.py", line 324, in glutInit 
    _base_glutInit(ctypes.byref(count), holder) 
TypeError: 'NoneType' object is not callable 

Non capisco perché sto ricevendo questo errore. Sto chiamando glutinit in modo sbagliato?

Sto usando Python 2.7.2.

+1

Sembra che ci sia qualcosa di sbagliato nell'installazione di pyopengl: '_base_glutInit' è' None' in 'OpenGL/GLUT/special.py'. –

+0

@FerdinandBeyer: l'ho installato con 'easy_install', quindi cosa suggerisco se dovessi fare un'installazione pulita dal sorgente. – RanRag

+0

@FerdinandBeyer: il tuo suggerimento ha funzionato, c'era qualcosa di sbagliato nell'installazione. L'ho intalled dalla fonte e ha funzionato bene. – RanRag

risposta

1

Il problema era con l'installazione PyOpenGL. In precedenza l'ho installato usando easy_install.

Quindi, come @Ferdinand ha suggerito che sembra esserci qualcosa di sbagliato nell'installazione di pyopengl.

Ho eseguito un'installazione pulita utilizzando python setup.py install e ha funzionato.

3

glutInit() prevede 2 argomenti, prima un numero int come numero di argomenti della riga di comando, quindi un elenco (di argomenti).
glutInit(len(sys.argv),sys.argv) dovrebbe fare come non c'è nessun argc nel modulo sys.

13

Stavo usando Python 2.7.3 su Windows 7 64-bit e ho riscontrato un problema con gli stessi sintomi di Noob.

Ma la precedente soluzione di reinstallazione PyOpenGL non mi è stata di aiuto.

Provo un longshot - installazione di freeglut - e ha aiutato!

Ho utilizzato il pacchetto binario MSVC 2.8.0 di Windows da here e ho rilasciato DLL a 32 e 64 bit sul mio 32-bit (c: \ Windows \ SysWOW64) e 64-bit (C: \ Windows \ System32) dirs di conseguenza.

+1

Normalmente non mi piace spingere vecchi thread, ma questa soluzione mi ha fatto sentire felice tutto funziona ora bene =) – r4d1um

7

ho installato PyOpenGL-3.0.2b2 su Python 3.2 utilizzando il setup.py install (con privilegi di amministratore), è venuto fuori con lo stesso errore, come l'OP. Lo script di installazione non copiava la cartella DLLS, quindi devi copiarlo da solo l'intera cartella \ PyOpenGL-3.0.2b2 \ OpenGL \ DLLS.
Questo ha funzionato per me, spero che aiuti chiunque altro.

+0

Grazie mille - ha funzionato! –

4

Lo stesso identico problema stava accadendo con me. Sto usando Python 2.7 su Windows XP 32 bit.

Soluzione:

Basta scaricare glut-3.7.6-bin.zip da http://user.xmission.com/~nate/glut.html, decomprimere, posizionare glut32.dll in C: \ Windows \ System32 e si dovrebbe essere OK.

5

nel sistema operativo Linux è necessario installare freeglut3 in Ubuntu 12.04:

sudo apt-get install freeglut3 
1

Ho avuto un problema simile con Python 2.7 64 bit windows. Installa il pacchetto pyOpenGL da http://www.lfd.uci.edu/~gohlke/pythonlibs/. Mille grazie a Christopher Gohlke per aver mantenuto questo !!

+0

Nota che le risposte al solo collegamento sono scoraggiate qui su SO. Per favore considera [modifica la tua risposta] (http://meta.stackexchange.com/a/8259/186599) e aggiungi una sinossi qui. – NAZIK

0

Questo sembra essere un bug nel programma di installazione di PyOpenGL Win32. Dovrebbe copiare sulla directory DLLS dal pacchetto sorgente (.zip) ma non riesce a farlo nei miei test. Questo dovrebbe essere risolto in PyOpenGL stesso, e lo farò per la prossima beta.

Nel frattempo, è possibile copiare la directory OpenGL/DLLS dal sorgente PyOpenGL 3.1.0b2 .zip nella directory site-packages/OpenGL per installare le DLL GLUT e GLE senza doverle installare nelle directory di sistema.