我正试图在Mac OS X上运行一个在windows上运行的项目。该项目使用OpenGL和PyQt库。使用OpenGL库时似乎出现了问题。
我下载了一个螺旋的OpenGL演示。
print("OpenGL: " + str(glGetString(GL_VERSION)))
返回OpenGL:b'2.1 NVIDIA-10.0.51 310.90.10.05b12'
当我尝试运行另一个项目时,PyCharm意外退出,我得到以下结果:
Traceback (most recent call last):
File "/CS 410/Agile-Development-Project-master2/package/ui/widgets/gamewidget.py", line 177, in initializeGL
glPrimitiveRestartIndex(self.restart)
File "/anaconda/lib/python3.5/site-packages/OpenGL/platform/baseplatform.py", line 402, in __call__
return self( *args, **named )
File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glPrimitiveRestartIndex,
cArguments = (4294967295,)
)
Mac信息图片
项目链接
主窗口。py公司
from PyQt5 import QtOpenGL
from PyQt5.QtWidgets import QMainWindow, QStackedWidget
from package.ui.widgets import GameWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
glformat = QtOpenGL.QGLFormat()
glformat.setVersion(3, 1)
glformat.setProfile(QtOpenGL.QGLFormat.CoreProfile)
self.setWindowTitle('Game name here')
#self.stacked_widget = QStackedWidget(GameWidget())
self.setCentralWidget(GameWidget(glformat))
gamewidget中的初始化。py公司
def __init__(self, *args, n=10, **kwargs):
将版本设置为3.2:glGetString(GL_VERSION)返回3.3上下文
新错误(python仍然意外退出):
Traceback (most recent call last):
File "/Users/daniel/WSCU/Spring 2017/CS 410/Agile-Development-Project-mastercurrent/package/ui/widgets/gamewidget.py", line 183, in initializeGL
self.initializeCube()
File "/Users/daniel/WSCU/Spring 2017/CS 410/Agile-Development-Project-mastercurrent/package/ui/widgets/gamewidget.py", line 142, in initializeCube
program = self.loadShaders()
File "/Users/daniel/WSCU/Spring 2017/CS 410/Agile-Development-Project-mastercurrent/package/ui/widgets/gamewidget.py", line 227, in loadShaders
raise RuntimeError(glGetShaderInfoLog(fs))
RuntimeError: b"ERROR: 0:6: Use of undeclared identifier 'gl_FragColor'\n"
编辑:
def initializeTimer(self):
self.pbar = QProgressBar(self)
self.pbar.setGeometry(30, 40, 200, 25)
self.timer = QBasicTimer()
self.timer.start(1200, self)
self.step = 100
self.pbar.setValue(self.step)
self.btn = QPushButton("Time is: " + str(int(self.step * 1.2)), self)
self.btn.setStyleSheet("background-color: black; color: red;")
self.btn.move(500, 10)
self.show()
def timerEvent(self, e):
if self.step <= 0:
self.timer.stop()
return
self.step -= 1
self.score += 1
# print(self.score)
self.btn.setText("Time is: " + str(int(self.step * 1.2)))
self.scoreLabel.setText("Score: " + str(int(self.score)))
self.pbar.setValue(self.step)
self.pbar.setVisible(True)
print(self.btn.text())
print(self.pbar.text())
def makeScoreLabel(self):
self.scoreLabel = QPushButton("Score: " + str(int(self.score)), self)
self.scoreLabel.setStyleSheet("background-color: white; color: red;")
self.scoreLabel.move(200, 10)
您使用的是2.1上下文,glPrimitiveRestartIndex()是一个3.1(核心)函数。
要请求3.1上下文,请创建一个QGLFormat()并指定版本。
glformat = QtOpenGL.QGLFormat()
glformat.setVersion(3, 1)
glformat.setProfile(QtOpenGL.QGLFormat.CoreProfile)
然后在创建它时将其传递给您的QGLWidget(glformat)。
所以关于你的项目。由于GameWidget
扩展了QGLWidget
,这意味着您应该将glform
传递给mainwindow.py
中的GameWidget
。
self.setCentralWidget(GameWidget(glformat))
注意GameWidget
中的__init__
。因为n
在*args
之前,这意味着b
最终是格式
,所以您需要像这样重新排列它:
def __init__(self, *args, n=10, **kwargs)
您现在的问题实际上是您的片段着色器。
0(5):错误C7533:全局变量gl_FragColor在版本120之后被弃用
您将版本设置为330,这意味着不推荐使用gl\u FragColor。相反,您必须指定自己的颜色输出。
#version 330
out vec4 outColor;
in vec3 fcolor;
void main()
{
outColor = vec4(fcolor, 1.0);
}
您仍然需要将glformat传递给QGLWidget。
编辑:
如果你想添加一个标签,那么不要这样:
self.widget = GameWidget()
self.setCentralWidget(self.widget)
然后你需要这样做:
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
self.label = QLabel()
self.label.setText("Hello World")
self.layout = QVBoxLayout()
self.layout.addWidget(self.label)
self.widget = QWidget()
self.widget.setLayout(self.layout)
self.setCentralWidget(self.widget)
问题当然是现在我们有了一个新的QWidget
,而不是GameWidget
(QGLWidget
)。这里的问题是您不能简单地将其他小部件添加到QGLWidget
。这就是为什么在OpenGL方面,人们通常有自定义GUI或所有控件、标签等的单独窗口。
昨天,我刚刚在Mac OS Catalina 10.15.7版上安装了面向企业Java和Web开发人员的Eclipse IDE。我拖动日食。从下载文件夹到应用程序文件夹的应用程序。它工作得很好。我创建了几个servlet。但今天,当我点击应用程序打开它时,我收到了一个问题报告(错误),所以它没有打开。 错误详细信息为。。 启动后的唤醒时间:3300秒 系统完整性保护:启用 崩溃的线程:0 异常类型
我如何使测试工作?
我刚刚安装了MacOSX和Mavericks(10.9.2)。安装了JDK1.7.0_ 55。一切似乎都安装正确。我下载了EclipseKepler4.3.2并解压缩到我的应用程序文件夹。我再次检查了安装情况。启动应用程序时,我会收到以下错误消息: 我检查了我的控制台输出,并在Eclipse错误报告中得到以下内容: 异常类型:EXC _坏_访问(SIGSEGV)异常代码:KERN _ INVALI
我正在尝试在python中使用selenium,由于某种原因我无法修改PATH,因此我只能指定浏览器驱动程序的位置。但是,我尝试了几个驱动程序,但都不起作用。 环境:Windows 7,Anaconda3-python3.6.1,selenium3.4.3,chrome59.0.3071.115(官方构建)(64位),chromedriver2.30(win32)。 这里是我尝试过的一部分代码和相
测试启动后,结果是测试通过,但测试框架意外退出。如何解决? 试样 测试特性 输出 配置 http://maven.apache.org/xsd/maven-4.0.0.xsd"
我在Android Studio中使用Tesseract来识别图片中的文本。当我像这样调用以下函数时: 会有一条红线表示“支持库不应该使用与CompilesDKVersion不同的版本”。然后我将compileSdkVersion和targetSdkVersion更改为22,我可以看到错误。 我可以在“compile'com.android.support:design:23.1.1'”下面看到一