PyOpenGL TypeError: объект "NoneType" не может быть вызван
Я пытаюсь изучить основы игрового программирования, и для этого я установил pygame
и pyopengl
.
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()
Когда я запускаю приведенный выше код в командной строке с помощью
python test.py
Я получаю следующую ошибку.
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
Я не понимаю, почему я получаю эту ошибку. Я называю glutinit
неправильным способом?
Я использую Python 2.7.2.
Ответы
Ответ 1
Проблема была в моей установке PyOpenGL
. Раньше я устанавливал его с помощью easy_install
.
Итак, как @Ferdinand предположил, что, похоже, что-то не так с вашей установкой pyopengl.
Я сделал чистую установку с помощью python setup.py install
, и она сработала.
Ответ 2
Я использовал Python 2.7.3 для Windows 7 64-bit и имел проблему, вызывающую те же симптомы, что и Noob.
Но вышеупомянутое решение переустановки PyOpenGL не помогло мне.
Я пытаюсь сделать longshot - установку freeglut - и это помогло!
Я использовал двоичный пакет Windows MSVC 2.8.0 от здесь и отбросил 32-разрядные и 64-разрядные библиотеки DLL на 32-разрядные (c:\Windows\SysWOW64) и 64-бит (C:\Windows\System32) соответственно.
Ответ 3
Я установил PyOpenGL-3.0.2b2 на Python 3.2 с помощью установки setup.py(с правами администратора), она вышла с той же ошибкой, что и OP.
Настройка script не копировала папку DLLS, поэтому вам нужно ее скопировать
всю папку \PyOpenGL-3.0.2b2\OpenGL\DLLS.
Это сработало для меня, надеюсь, что это поможет кому-то еще.
Ответ 4
в linux os вы должны установить freeglut3
в ubuntu 12.04:
sudo apt-get install freeglut3
Ответ 5
Похоже, вам нужно загрузить либо глют, либо freeglut вместе с pyOpenGL. И самое главное, на моей 64-битной системе Win7 она работала только после того, как я поместил файл glut32.dll
в C:\Windows\System
(NOT C:\Windows\System32
- его размещение в \System32
не сработало!)
Здесь ссылка для перенасыщения: http://user.xmission.com/~nate/glut.html
И freeglut: http://www.transmissionzero.co.uk/software/freeglut-devel/
Ответ 6
То же самое происходило со мной. Я использую Python 2.7 для Windows xp 32-бит.
Решение:
Просто скачайте glut-3.7.6-bin.zip из http://user.xmission.com/~nate/glut.html, распакуйте, поместите glut32.dll в C:\windows\system32, и все будет в порядке.
Ответ 7
glutInit()
ожидает 2 аргумента, сначала int как число аргументов командной строки, затем список (аргументов).
glutInit(len(sys.argv),sys.argv)
должен делать, как нет argc
в модуле sys.
Ответ 8
У меня была аналогичная проблема с 64-битными окнами python 2.7.
Установите пакет pyOpenGL из http://www.lfd.uci.edu/~gohlke/pythonlibs/. Большое спасибо Кристоферу Гольке за то, что он поддержал это!
Ответ 9
Я просто использую python2.7.3 на windows-64bits, и я столкнулся с проблемой.
Я решил это, используя неоперабельный пакет pyopengl.
Из художественного, кажется, официальный пакет не поддерживает 64-битные окна.
http://codeyarns.com/2012/04/27/pyopengl-installation-notes-for-windows/
Ответ 10
Кажется, это ошибка в установщике PyOpenGL win32. Предполагается скопировать каталог DLLS из исходного пакета (.zip), но не удается сделать это в моих тестах. Это должно быть рассмотрено в PyOpenGL, и я сделаю это для следующей беты.
Тем временем вы можете скопировать каталог OpenGL/DLLS из источника .zip источника PyOpenGL 3.1.0b2 в каталог вашего сайта /OpenGL для установки DLL GLUT и GLE без необходимости их установки в свои системные каталоги.