OpenGL Widget部件是一个OpenGL(Open Graphics Library,开放图形库)图形渲染的部件,能够在PyQt和Qt的应用中显示图形(包括2D和3D图形),对应类为 QOpenGLWidget 。在Designer中,该部件没有任何独有属性,都是继承的QWidget的属性。html
因为本人对OpenGL没有任何研究,所以相关概念在此不进行介绍,在此根据官网给的文档说明及本身的验证测试,介绍使用QOpenGLWidget显示2D图片的实现方式,对于3D图片的,在此不进行介绍。python
因为要使得QOpenGLWidget进行2D图片展现,必须在QOpenGLWidget对象中对图片进行渲染,有多种方法来实现,从QOpenGLWidget派生子类是最简单的方法。派生子类后,经过以下两种方法均可以实现图片的渲染:web
须要注意:svg
在一个PyQt窗口中的指定位置使用QOpenGLWidget展现图片,因为选择QOpenGLWidget子类化来实现渲染,所以不能直接在窗口中放置QOpenGLWidget部件,须要代码来实现QOpenGLWidget部件的子类,并在界面类中将QOpenGLWidget部件的子类对象放置到界面类中指定位置。函数
其中graphicFrame用于做为放置QOpenGLWidget对象的容器,事先布局在窗口中。布局
具体类代码以下:学习
class grahicOpenGL(QtWidgets.QOpenGLWidget): def __init__(self,parent = None,picFile=None): super().__init__(parent) self.img = None self.picFile = None if picFile:self.loadPicFile(picFile) def loadPicFile(self,picFile): self.picFile = picFile self.img = QtGui.QImage() self.img.load(picFile) def paintGL(self): if self.img: paint = QtGui.QPainter() paint.begin(self) paint.drawImage(QtCore.QPoint(0,0),self.img) paint.end()
界面派生类的构造方法中除了完成常规的界面派生类处理外,还主要完成将QOpenGLWidget子类grahicOpenGL对象的位置放置,并判断在该位置是否设置了布局,若是没有设置布局还须要进行布局处理。测试
老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只须要9.9元,该部分与第十五章的内容基本对应,但一样内容在付费专栏上整体来讲更详细、案例更多。本节内容对应付费专栏的《第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片》。若是有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。ui