PySide2正常运行的Textures示例在PySide6中报错的原因及解决方案
报错原因
Qt 6 版本已正式移除了此前就被标记为废弃的QGLWidget系列类,旧的QGLWidget相关API全部迁移到新的QOpenGLWidget类中,归属模块也同步调整。PySide6 是基于 Qt6 封装的绑定库,因此PySide6.QtOpenGL模块不存在QGLWidget属性,这是报错的直接原因。而 PySide2 基于 Qt5 开发,Qt5 仍保留了QGLWidget的向下兼容支持,因此该示例在 PySide2 环境下可以正常运行。这个报错同时说明 PySide6 自带的该示例没有及时适配 Qt6 的API变动,属于官方示例的兼容漏洞。
解决方案
- 方案一:修改代码适配PySide6环境
- 新增模块导入:在代码导入部分添加
from PySide6 import QtOpenGLWidgets - 替换基类声明:把原代码中
class GLWidget(QtOpenGL.QGLWidget):修改为class GLWidget(QtOpenGLWidgets.QOpenGLWidget): - 调整其他废弃API:原
QGLWidget的makeCurrent()、swapBuffers()等常用方法在QOpenGLWidget中都有兼容实现,绝大多数场景下完成前两步即可正常运行;如果遇到其他API报错,对照Qt6 OpenGL模块的迁移说明调整对应调用即可。
- 新增模块导入:在代码导入部分添加
- 方案二:直接使用PySide2运行
如果不需要强制使用PySide6环境,直接在PySide2环境中运行该示例即可,不需要做任何代码修改。
补充说明:Windows环境下PySide安装完成后该示例默认存放路径为
%LocalAppData%\Programs\Python\PythonXX\Lib\site-packages\PySideX\examples\opengl\textures,其中XX对应你的Python版本号,X对应PySide的大版本号(2或6)。
内容的提问来源于stack exchange,提问作者Giorgos Xou
相关产品推荐
相关产品推荐

