pyqtgraph.opengl VS OpenGL.GL - как отобразить ось во встроенном виджете PyQt5 OpenGL - PullRequest
0 голосов
/ 16 декабря 2018

Как взаимодействовать с PyQt5.QtWidgets openGLWidget, используя pyqtgraph.opengl вместо OpenGL.GL?Мне нужно сделать следующий графический вывод в openGLWidget в форме PyQt5:

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, и я хочу сделать графический вывод вopenGLWidget, который я определил при plot_line() функции.Как мне выполнить такой вывод?

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_())

1 Ответ

0 голосов
/ 16 декабря 2018

QOpenGLWidget не является GLViewWidget, поэтому вы не можете заменить его напрямую.Ближайший вариант заключается в том, что вы используете GLViewWidget в Qt Designer с помощью продвижения, для него щелкните правой кнопкой мыши QOpenGLWidget и выберите опцию «Повышать до ...», откроется следующее диалоговое окно со следующими значениями:

enter image description here

Затем нажмите кнопки добавления и продвижения.Выполнение выше сгенерированного .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_())

enter image description here

...