Запуск PyQt5 на Raspberry Pi - ошибка PyQt5._QOpenGLFunctions_ES2

У меня проблема с запуском PyQt5 на Raspberry Pi 4.

Я использую raspberry pi 4, версия 10 (buster), ядро ​​версии 4.19.75-v71.

Python по умолчанию - 3.7.3.

Я выполнил те же шаги по установке sip и PyQt5, как упоминалось в этой теме здесь < / а>. Я также установил python 3.6.0, выполнив шаги, представленные в вышеупомянутом потоке.

После завершения установки без ошибок и запуска кода появляется следующее сообщение об ошибке:

qt5ct: using qt5ct plugin

QEGLPlatformContext: Failed to create context: 3009

QOpenGLWindow::beginPaint: Failed to create context

QOpenGLWindow::beginPaint: Failed to make context current

Traceback (most recent call last):

  File "my_code.py", line 68, in initializeGL

    self.gl = self.context().versionFunctions()

AttributeError: module 'PyQt5._QOpenGLFunctions_ES2' has no attribute 'QOpenGLFunctions_ES2'

Aborted

Любое руководство, как решить эту проблему? Очень признателен. Заранее спасибо.

PS код работает на Win10 без сбоев. Таким образом, сам код не должен иметь проблем. (среда на Win10: numpy = 1.14.3; numpy-stl = 2.5.0; pyqt5 = 5.10.1; sip = 4.19.8; six = 1.11.0; python = 3.6.0; python-utils = 2.3 .0)


person Baraa    schedule 13.11.2019    source источник


Ответы (1)


возможно, вы можете попробовать переустановить pyqt5, чтобы решить эту проблему. посмотрите, есть ли поток, занятый pip / pyqt5 / qmake.exe. Или посмотрите свой GPU, это OpenGL2.0 или более поздняя версия?

вы сказали, что проблемы были вызваны self.gl = self.context (). versionFunctions () И я писал пример, вы можете попробовать:



    import sys
    import math
    from PyQt5.QtCore import pyqtSignal, QPoint, QSize, Qt
    from PyQt5.QtGui import QColor
    from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QOpenGLWidget, QSlider,
                                 QWidget)
    
    import OpenGL.GL as gl
    
    
    class Window(QWidget):
    
        def __init__(self):
            super(Window, self).__init__()
    
            self.glWidget = GLWidget()
    
            self.xSlider = self.createSlider()
            self.ySlider = self.createSlider()
            self.zSlider = self.createSlider()
    
            self.xSlider.valueChanged.connect(self.glWidget.setXRotation)
            self.glWidget.xRotationChanged.connect(self.xSlider.setValue)
            self.ySlider.valueChanged.connect(self.glWidget.setYRotation)
            self.glWidget.yRotationChanged.connect(self.ySlider.setValue)
            self.zSlider.valueChanged.connect(self.glWidget.setZRotation)
            self.glWidget.zRotationChanged.connect(self.zSlider.setValue)
    
            mainLayout = QHBoxLayout()
            mainLayout.addWidget(self.glWidget)
            mainLayout.addWidget(self.xSlider)
            mainLayout.addWidget(self.ySlider)
            mainLayout.addWidget(self.zSlider)
            self.setLayout(mainLayout)
    
            self.xSlider.setValue(15 * 16)
            self.ySlider.setValue(345 * 16)
            self.zSlider.setValue(0 * 16)
    
            self.setWindowTitle("Hello GL")
    
        def createSlider(self):
            slider = QSlider(Qt.Vertical)
    
            slider.setRange(0, 360 * 16)
            slider.setSingleStep(16)
            slider.setPageStep(15 * 16)
            slider.setTickInterval(15 * 16)
            slider.setTickPosition(QSlider.TicksRight)
    
            return slider
    
    
    class GLWidget(QOpenGLWidget):
        xRotationChanged = pyqtSignal(int)
        yRotationChanged = pyqtSignal(int)
        zRotationChanged = pyqtSignal(int)
    
        def __init__(self, parent=None):
            super(GLWidget, self).__init__(parent)
    
            self.object = 0
            self.xRot = 0
            self.yRot = 0
            self.zRot = 0
    
            self.lastPos = QPoint()
    
            self.trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
            self.trolltechPurple = QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)
    
        def getOpenglInfo(self):
            info = """
                Vendor: {0}
                Renderer: {1}
                OpenGL Version: {2}
                Shader Version: {3}
            """.format(
                gl.glGetString(gl.GL_VENDOR),
                gl.glGetString(gl.GL_RENDERER),
                gl.glGetString(gl.GL_VERSION),
                gl.glGetString(gl.GL_SHADING_LANGUAGE_VERSION)
            )
    
            return info
    
        def minimumSizeHint(self):
            return QSize(50, 50)
    
        def sizeHint(self):
            return QSize(400, 400)
    
        def setXRotation(self, angle):
            angle = self.normalizeAngle(angle)
            if angle != self.xRot:
                self.xRot = angle
                self.xRotationChanged.emit(angle)
                self.update()
    
        def setYRotation(self, angle):
            angle = self.normalizeAngle(angle)
            if angle != self.yRot:
                self.yRot = angle
                self.yRotationChanged.emit(angle)
                self.update()
    
        def setZRotation(self, angle):
            angle = self.normalizeAngle(angle)
            if angle != self.zRot:
                self.zRot = angle
                self.zRotationChanged.emit(angle)
                self.update()
    
        def initializeGL(self):
            print(self.getOpenglInfo())
    
            self.setClearColor(self.trolltechPurple.darker())
            self.object = self.makeObject()
            gl.glShadeModel(gl.GL_FLAT)
            gl.glEnable(gl.GL_DEPTH_TEST)
            gl.glEnable(gl.GL_CULL_FACE)
    
        def paintGL(self):
            gl.glClear(
                gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            gl.glLoadIdentity()
            gl.glTranslated(0.0, 0.0, -10.0)
            gl.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
            gl.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
            gl.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
            gl.glCallList(self.object)
    
        def resizeGL(self, width, height):
            side = min(width, height)
            if side  360 * 16:
                angle -= 360 * 16
            return angle
    
        def setClearColor(self, c):
            gl.glClearColor(c.redF(), c.greenF(), c.blueF(), c.alphaF())
    
        def setColor(self, c):
            gl.glColor4f(c.redF(), c.greenF(), c.blueF(), c.alphaF())
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())


прежде чем попробовать этот пример, выполните эту команду (установите pyOpenGL): pip install pyOpenGL

person NNTeam    schedule 10.07.2021