2017-10-27 17 views
0

Qtデザイナでインターフェイスを作成した場合、PythonアプリケーションでQtのOpenGLWidgetを使用するにはどうすればよいですか?PyOpenGLでPyQt5 .uiを使用する方法

+0

@voiDnyxまあ、はい。何かこれに間違っている?これは自分自身を理解するのにかなり時間がかかりました。私も同様の質問をしていないので、私はこれを投稿すれば誰かにとって役に立ちそうだと思いました。 – Kamanji

答えて

0

あなたは(QtDesignerは、必要なすべてのコントロールおよびOpenGLウィジェットで.uiファイルを作成して使用してPyOpenGL、PyQt5、Qt5エディタ(私たちはIDEを必要としませんが、我々はそれに付属しているのQt Designerを必要とする)

をインストールしている必要がありますPythonであなたがウィジェットのオブジェクトにアクセスするには、この名前を使用しますので、このファイルtest.ui)、適切 名をウィジェットに名前を付け、あなたが あなたのOpenGLウィジェットは「openGLWidget」

命名する必要があるファイルの.pyと同じディレクトリに置き
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 instrumentatorを使用して、独自の3Dアプリケーションを作成できます。 マウス入力とインタラクションの場合、Qt5のウィジェット機能を使用できます Qt5イベントを使用する必要がある場合は、mainWindowクラスの新しい関数を定義するために "on_widgetName_clicked"を使用する必要があります。それはすべての問題

Python code ​​

なくても、このイベントはGUIで発生している時はいつでも PyOpenGl機能は、このテンプレートでは、100%づけしている、とあなたは、デフォルトのバージョン(C/C++)専用のチュートリアルを使用することができます動作します

.uiファイルをtest.uiとして保存します。

関連する問題