pyqtgraph.opengl VS OpenGL.GL - 如何在 PyQt5 OpenGL 嵌入式小部件中显示轴

pyqtgraph.opengl VS OpenGL.GL - how to display axis at PyQt5 OpenGL embedded widget

如何使用 pyqtgraph.opengl 而不是 OpenGL.GLPyQt5.QtWidgets openGLWidget 互动? 我需要在 PyQt5 表单上将下一个图形输出到 openGLWidget

def plot_line(line):
    pl_line = np.array(line)
    color = (0.0, 0.0, 200.0, 0.5)
    newline = gl.GLLinePlotItem(pos=pl_line, color=color, width=5, antialias=False)
    w.addItem(newline)
    w.show()

line1 = [(-33.13, 1004.82, -125.7), (21.38, 1059.32, -162.03)]
plot_line(line1)

这里我有一个示例,其中我有一个带有按钮和 openGLWidget 的 UI,我想将图形输出到我在 plot_line() 函数中定义的 openGLWidget。我应该如何执行这样的输出?

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.uic import loadUi
import pyqtgraph.opengl as gl

class app_1(QDialog):
    def __init__(self):
        super(app_1,self).__init__()
        loadUi('Qt_test_Ui.ui', self)
        self.setWindowTitle('Test GL app')
        self.pushButton.clicked.connect(self.on_push_b1)

    @pyqtSlot()
    def on_push_b1(self):
        self.openGLWidget.paintGL = self.paintGL()


    def paintGL(self):
        w = self.openGLWidget
        axis = gl.GLAxisItem()  # show 3D axis 
        w.addItem(axis)


app=QApplication(sys.argv)
wid=app_1()
wid.show()
sys.exit(app.exec_())

QOpenGLWidget 不是 GLViewWidget,因此您不能直接替换它。最近的选择是在 Qt Designer 中使用 GLViewWidget 使用促销,右击 QOpenGLWidget 和 select 选项 "Promote to ...",将打开以下对话框并设置以下值:

然后按添加和推广按钮。执行上述操作生成的 .ui 如下:

Qt_test_Ui.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="GLViewWidget" name="openGLWidget"/>
   </item>
   <item>
    <widget class="QPushButton" name="pushButton">
     <property name="text">
      <string>PushButton</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <customwidgets>
  <customwidget>
   <class>GLViewWidget</class>
   <extends>QOpenGLWidget</extends>
   <header>pyqtgraph.opengl</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

那么使用方法如下:

import sys
from PyQt5 import QtCore, QtWidgets, uic
import pyqtgraph.opengl as gl

class app_1(QtWidgets.QDialog):
    def __init__(self):
        super(app_1,self).__init__()
        uic.loadUi('Qt_test_Ui.ui', self)
        self.setWindowTitle('Test GL app')
        self.pushButton.clicked.connect(self.on_push_b1)

    @QtCore.pyqtSlot()
    def on_push_b1(self):
        axis = gl.GLAxisItem()
        self.openGLWidget.addItem(axis)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    wid=app_1()
    wid.show()
    sys.exit(app.exec_())