热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在RaspberryPi上运行PyQt5“PyQt5._QOpenGLFunctions_ES2”错误

我在RaspberryPi4上运行PyQt5时遇到问题。我使用树莓派4(第10版(克星)内核)4.

我在Raspberry Pi 4上运行PyQt5时遇到问题。

我使用树莓派4(第10版(克星)内核)4.19.75-v71。

默认python是3.7.3。

我按照与该线程here相同的步骤安装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;六个= 1.11.0; python = 3.6.0; python-utils = 2.3 .0)


也许你可以尝试重新安装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)

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,-10.0)
gl.glRotated(self.xRot / 16.0,0.0)
gl.glRotated(self.yRot / 16.0,0.0)
gl.glRotated(self.zRot / 16.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.alphaF())


if __name__ == '__main__':

app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

在尝试此示例之前,请运行此命令(安装 pyOpenGL):
pip 安装 pyOpenGL


推荐阅读
author-avatar
长大的夜夜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有