前言
QOpenGLWidget是用于渲染 OpenGL 图形的小部件,QOpenGLWidget 提供了一个用于绘制OpenGL图形的界面。它是 QOpenGLContext 和 QOpenGLFunctions 的封装,允许开发者利用OpenGL的强大功能进行2D和3D渲染。下面是它的相关控件继承关系:

这个控件我也只是简单的了解了一下,由B站上QOpenGLWidget控件教学大多数是用C++写的,所以我通过科学上网在youtube上跟一个博主学,用python边学边写。由于博主目前也只是略懂,所以教不了太多。
在写代码之前,我们需要安装PyOpenGL:
pip install PyOpenGL PyOpenGL_accelerate
接下来,我就分享QOpenGLWidget的代码
OpenGL1.py:
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from OpenGLMain import OpenGLWidget
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent) # 使用 super() 初始化
self.openglwidget = OpenGLWidget(self)
self.setCentralWidget(self.openglwidget)
self.setWindowTitle("OpenGL")
self.setGeometry(200, 200, 400, 400)
需要注意的是
-
检查是否有其他文件命名为
OpenGL.py,这会导致导入冲突(本人踩坑)
OpenGLMain.py:
from PyQt6.QtWidgets import QApplication
from PyQt6.QtOpenGLWidgets import QOpenGLWidget
from PyQt6.QtCore import QTimer
from OpenGL.GL import *
from OpenGL.GLU import *
class OpenGLWidget(QOpenGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update)
self.timer.start(16)
def initializeGL(self):
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHT0)
glEnable(GL_LIGHTING)
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
glEnable(GL_COLOR_MATERIAL)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0) # 红色
glVertex3f(-0.5, -0.5, 0.0)
glColor3f(0.0, 1.0, 0.0) # 绿色
glVertex3f(0.5, -0.5, 0.0)
glColor3f(0.0, 0.0, 1.0) # 蓝色
glVertex3f(0.0, 0.5, 0.0)
glEnd()
def resizeGL(self, w, h):
glViewport(0, 0, w, h)
if __name__ == "__main__":
app = QApplication([])
widget = OpenGLWidget()
widget.show()
app.exec()
运行结果

1182

被折叠的 条评论
为什么被折叠?



