【发布时间】:2019-04-09 18:12:04
【问题描述】:
我正在从 Winpython3.4.3.7Qt4 迁移到 Winpython3.x.x.xQt5(我尝试了一堆版本),我遇到了以下问题:
以下最小代码(它没有任何用处,但演示了错误):
from PyQt5 import QtWidgets
import OpenGL.GL as gl
from PyQt5.QtOpenGL import QGLWidget
qapp = QtWidgets.QApplication([])
window = QGLWidget()
window.makeCurrent()
index = gl.glGenLists(1)
print(index)
在我所有使用 Winpython3.4.3.7Qt4 的机器上运行并打印“1”。当我使用 Winpython3.x.x.xQt5 时,它不再在我的虚拟机上运行。我得到的错误是:
Traceback (most recent call last):
File ".\opengl.py", line 12, in <module>
index = gl.glGenLists(1)
File "C:\Winpython-64bit-3.6.7.0\python-3.6.7\lib\site-packages\OpenGL\platform\baseplatform.py", line 405, in __call__
return self( *args, **named )
File "C:\Winpython-64bit-3.6.7.0\python-3.6.7\lib\site-packages\OpenGL\error.py", line 232, in glCheckError
baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glGenLists,
cArguments = (1,),
result = 0
)
我感觉 window.makeCurrent() 没有通过,但我不知道为什么。从 Qt4 到 Qt5 在这方面有什么变化?
【问题讨论】:
-
我已经在 Linux 中使用 Python 3.7 和 PyQt 5.11.2 进行了测试,我没有遇到任何问题
-
在Windows上试试,很可能只是那里的问题。在四台 Windows 机器中,我有一台可以毫无问题地运行代码。
-
检查你得到的 OpenGL 上下文版本。
glGenLists十年前已从现代版本的 OpenGL 中删除。 -
我修改了我的答案,在你的例子中加入了对 makeCurrent() 的调用,看来问题已经解决了,让我知道它对你的影响 ;-)
标签: python-3.x opengl pyqt pyqt5 pyopengl