本文介绍了pyqtgraph.opengl VS OpenGL.GL-如何在PyQt5 OpenGL嵌入式小部件上显示轴的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How to interact with PyQt5.QtWidgets openGLWidget using pyqtgraph.opengl instead of OpenGL.GL?I need to make a next graphical output to openGLWidget on the PyQt5 form:

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,我想对openGLWidget进行图形化输出,这是我在plot_line()函数中定义的.我应该如何执行这样的输出?

Here I have an example where I have a UI with a button and openGLWidget and I want to make a graphical output to openGLWidget which I defining at plot_line() function. How should I perform such output?

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并选择选项"Promote to ...",将打开以下对话框并设置以下值:

QOpenGLWidget is not a GLViewWidget so you can not replace it directly. The nearest option is that you use GLViewWidget in Qt Designer using the promotion, for it right click on QOpenGLWidget and select the option "Promote to ...", the following dialog will be opened and set with the following values:

然后按添加和升级按钮.上面做的是生成的.ui如下:

Then press the add and Promote buttons. Doing the above the generated .ui is the following:

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>

然后按以下方式使用它:

Then it is used in the following way:

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

这篇关于pyqtgraph.opengl VS OpenGL.GL-如何在PyQt5 OpenGL嵌入式小部件上显示轴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-21 21:02