pythonocc-core报错:

1. #使用vscode运行pyOCC环境的相关代码时遇到了如下报错

RuntimeError: Aspect_GraphicDeviceDefinitionErrorOpenGl_Window::CreateWindow: SetPixelFormat failed. Error code: 2000 raised from method Init of class Display3d

#根据这位博主的分享成功解决了问题pythonocc-core报错:SetPixelFormat failed. Error code: 2000 raised from method Init of class Display3d-CSDN博客

2.解决办法

即:

打开运行环境文件:******\pyocc\lib\site-packages\OCC\Display\qtDisplay.py

(如我的是C:\ProgramData\pyoccenv\lib\site-packages\OCC\Display\qtDisplay.py)


将38行内容从:

class qtBaseViewer(QtOpenGL.QGLWidget):


替换成

class qtBaseViewer(QtWidgets.QWidget):

3. 解释

觉得很神奇,查阅了一下,得到如下解释:

class qtBaseViewer(QtOpenGL.QGLWidget): 替换为 class qtBaseViewer(QtWidgets.QWidget): 通常是为了避免与OpenGL相关的问题,或者是出于简化代码、提高兼容性的考虑。以下是这两种类的主要区别和替换的可能原因:

(1)QtOpenGL.QGLWidgetQtWidgets.QWidget 的区别

  • QtOpenGL.QGLWidget:

    • 这是一个专门为OpenGL渲染设计的小部件,允许你直接在其中绘制OpenGL内容。
    • QGLWidget 通过继承 QWidget 类并添加了与OpenGL相关的功能,如上下文创建、缓冲区管理、渲染循环控制等,使得它特别适合用来开发3D图形应用。
    • 使用 QGLWidget 需要配置合适的OpenGL上下文,并且如果系统配置不当或驱动不兼容,可能会导致像素格式错误、渲染失败等问题。
  • QtWidgets.QWidget:

    • 这是一个通用的小部件,通常用于构建用户界面的基本元素。它没有与OpenGL直接相关的功能。
    • QWidget 更加轻量且兼容性更好,但如果你想使用OpenGL进行渲染,就需要手动管理OpenGL上下文和渲染过程。

(2) 替换为 QtWidgets.QWidget 的可能原因

  • 避免OpenGL依赖

    • 如果程序不需要进行OpenGL渲染,使用 QGLWidget 是没有必要的,反而可能引入不必要的复杂性和依赖。通过使用 QWidget,你可以简化代码并避免与OpenGL相关的兼容性问题。
  • 兼容性和稳定性

    • QGLWidget 依赖于底层的OpenGL实现,如果系统的OpenGL配置不正确(如缺少驱动、版本不兼容等),可能会导致程序崩溃或无法正常工作。替换为 QWidget 可以避免这些问题,提供更广泛的兼容性。
  • 使用现代的OpenGL替代品

    • QGLWidget 已经被Qt的新类所取代,如 QOpenGLWidgetQOpenGLWidget 提供了更现代化的OpenGL支持和更好的性能。如果你不想使用旧的 QGLWidget,但又需要OpenGL功能,可以考虑使用 QOpenGLWidget

(3) 什么时候替换

  • 不需要OpenGL功能:如果你的应用程序不需要进行OpenGL渲染,仅仅是为了显示一些2D图形或普通的用户界面,那么使用 QWidget 是更合适的选择。

  • 排查和解决问题:如果你遇到了与OpenGL相关的错误,例如像素格式设置失败、渲染错误等,暂时切换到 QWidget 可能有助于确定问题是否与OpenGL有关。

  • 升级和维护:如果你正在维护旧代码,并希望提高兼容性和代码的可维护性,切换到 QWidgetQOpenGLWidget 是值得考虑的。

(4)在替换后的调整

  • 如果你替换了 QGLWidgetQWidget,但是仍然需要OpenGL渲染,你需要手动管理OpenGL上下文,并在 QWidgetpaintEvent 中进行OpenGL绘制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值