簡體   English   中英

如何在PyOpenGL中使用PyQt5 .ui

[英]How to use PyQt5 .ui with PyOpenGL

如果我在Qt Designer中創建了接口,如何在python應用程序中使用Qt的OpenGLWidget?

您應該已經安裝了PyOpenGL,PyQt5,Qt5編輯器(我們不需要IDE,但需要它附帶的Qt Designer)。

使用QtDesigner創建具有所有必要控件和OpenGL小部件的.ui文件(適當地命名小部件,因為在python中,您將使用此名稱訪問小部件的對象)將此文件命名為test.ui並將其放置在與.py文件相同的目錄中OpenGL小部件必須命名為“ openGLWidget”

import OpenGL.GL as gl
import OpenGL.GLU as glu
import OpenGL.GLUT as glut
from PyQt5 import QtWidgets as qWidget
from PyQt5 import QtGui as qGui
from PyQt5 import QtCore as qCore
from PyQt5 import uic
import sys
import os


class mainWindow(qWidget.QMainWindow):
    """Main window class."""

    def __init__(self, *args):
        """Init."""
        super(mainWindow, self).__init__(*args)
        ui = os.path.join(os.path.dirname(__file__), 'test.ui')
        uic.loadUi(ui, self)

    def setupUI(self):
        print("\033[1;101m SETU6P UI \033[0m")
        self.windowsHeight = self.openGLWidget.height()
        self.windowsWidth = self.openGLWidget.width()

        self.openGLWidget.initializeGL()
        self.openGLWidget.resizeGL(self.windowsWidth, self.windowsHeight)
        self.openGLWidget.paintGL = self.paintGL
        self.openGLWidget.initializeGL = self.initializeGL

    def paintGL(self):
        self.loadScene()
        glut.glutWireSphere(2, 13, 13)

    def initializeGL(self):
        print("\033[4;30;102m INITIALIZE GL \033[0m")
        gl.glEnable(gl.GL_BLEND)
        gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
        gl.glEnable(gl.GL_DEPTH_TEST)

    def loadScene(self):
        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
        gl.glMatrixMode(gl.GL_PROJECTION)
        gl.glLoadIdentity()
        x, y, width, height = gl.glGetDoublev(gl.GL_VIEWPORT)
        glu.gluPerspective(
            45,  # field of view in degrees
            width / float(height or 1),  # aspect ratio
            .25,  # near clipping plane
            200,  # far clipping plane
        )

        gl.glMatrixMode(gl.GL_MODELVIEW)
        gl.glLoadIdentity()

        glu.gluLookAt(12, 12, 12, 0, 0, 0, 0, 1, 0)


app = qWidget.QApplication(sys.argv)
window = mainWindow()
window.setupUI()
window.show()
sys.exit(app.exec_())

此時,您應該看到GUI窗口,其中包含所有放置的元素,以及帶有白色球體的openGLwidget顯示在中間,現在您可以使用所有OpenGl工具來創建自己的3D應用程序。 對於鼠標輸入和交互,可以使用Qt5中的Widget函數。如果需要使用Qt5事件,則應使用“ on_widgetName_clicked”在mainWindow類中定義新函數。 只要此事件在GUI中發生,PyOpenGl的功能就可以在此模板中100%訪問,它將起作用,並且您也可以使用默認版本(C / C ++)專用的教程。

Python代碼 .ui文件代碼

將.ui文件另存為test.ui

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM