En utilisant PyQtGraph, j'ai défié l'interface graphique du tracé 3D. Pour ceux qui ne l'ont jamais fait, je pensais que c'était un travail difficile, alors je l'ai noté. Je l'ai fait sous Windows.
Je vais d'abord écrire le code, mais ** si vous ne pouvez pas le faire, lisez ci-dessous. ** Peut-être que cela n'inclut tout simplement pas OpenGL (pyopengl).
Enregistrez le code suivant dans un fichier tel que home a.py et exécutez-le avec python a.py. J'ai l'intention de l'essayer avec une structure aussi simple que possible.
import sys
from PySide import QtCore, QtGui
import numpy as np
import pyqtgraph.opengl as gl
import pyqtgraph as pg
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(777, 777)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.graph = gl.GLViewWidget(self.centralwidget)
self.graph.setObjectName("graph")
self.verticalLayout.addWidget(self.graph)
self.graph.opts['distance'] = 30
self.graph.show()
self.g = gl.GLGridItem()
self.graph.addItem(self.g)
self.n=1
numX, startX, endX = self.n, -1, 1+self.n
numY, startY, endY = self.n, -1, 1+self.n
numZ, startZ, endZ = self.n, -1, 1+self.n
X = np.linspace(startX, endX, numX)
Y = np.linspace(startY, endY, numY)
Z = np.linspace(startZ, endZ, numZ)
#position of scatter in 3D
pos = np.array([[i,j,k] for i in X for j in Y for k in Z])
color = (1,1,1,1)
size = 0.5
self.scttrPlt = gl.GLScatterPlotItem(pos=pos, size=size, color=color, pxMode=False)
self.scttrPlt.translate(5,5,0)
self.graph.addItem(self.scttrPlt)
self.psbtn = QtGui.QPushButton(self.centralwidget)
self.psbtn.setObjectName("psbtn")
self.psbtn.setText("Plot")
self.verticalLayout.addWidget(self.psbtn)
QtCore.QObject.connect(self.psbtn, QtCore.SIGNAL("clicked()"), self.plot)
def plot(self):
self.n+=1
numX, startX, endX = self.n, -1, 1+self.n
numY, startY, endY = self.n, -1, 1+self.n
numZ, startZ, endZ = self.n, -1, 1+self.n
X = np.linspace(startX, endX, numX)
Y = np.linspace(startY, endY, numY)
Z = np.linspace(startZ, endZ, numZ)
pos = np.array([[i,j,k] for i in X for j in Y for k in Z])
color = (1,1,1,1)
size = 0.5
self.scttrPlt.setData(pos=pos,color=color,size=size)
pg.setConfigOption('foreground', 'k')
pg.setConfigOption('background', 'w')
class ControlMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ControlMainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
mySW = ControlMainWindow()
mySW.show()
sys.exit(app.exec_())
Au moment d'écrire ceci, je ne sais pas ce qu'est OpenGL. Lors de l'utilisation du logiciel 3DCG, il est reconnu qu'une case à cocher telle que OpenGL apparaît.
python -m pyqtgraph.example
Même si vous sélectionnez "Graphiques 3D> Nuage de points" dans le lanceur de J'ai seulement eu une erreur. J'obtiens l'erreur suivante.
E:\hoge>python -m pyqtgraph.examples
Using PySide (default graphics system)
Using PySide (default graphics system)
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\pyqtgraph\examples\GLScatterPlotItem.py", line 11, in <module>
import pyqtgraph.opengl as gl
File "C:\Python27\lib\site-packages\pyqtgraph\opengl\__init__.py", line 1, in <module>
from .GLViewWidget import GLViewWidget
File "C:\Python27\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 2, in <module>
from OpenGL.GL import *
ImportError: No module named OpenGL.GL
Il n'y a pas de module nommé OpenGL.GL ... Faisons ce qui suit sur la ligne de commande. Au fait, le nom n'est pas OpenGL, mais pyopengl dans toutes les lettres minuscules.
pip install pyopengl
E:\hogehoge>pip install pyopengl
Collecting pyopengl
Downloading PyOpenGL-3.1.0.tar.gz (1.2MB)
100% |################################| 1.2MB 298kB/s
Building wheels for collected packages: pyopengl
Running setup.py bdist_wheel for pyopengl ... done
Stored in directory: C:\Users\yusuke\AppData\Local\pip\Cache\wheels\1c\17\50\f69d63e0a8169fb890f5a167817a73391be85d30e86fd29504
Successfully built pyopengl
Installing collected packages: pyopengl
Successfully installed pyopengl-3.1.0
Cette fois, c'est fait. L'image ci-dessus est un exemple fourni avec PyQt Graph. Cela fonctionne en temps réel. Vous pouvez également vérifier le code à partir du lanceur d'exemples.
python -m pip install --upgrade pip
Faisons le. Je ne l'ai pas fait, alors j'ai eu l'erreur suivante.
E:\hoge>pip install pyopengl
Collecting OpenGL
Could not find a version that satisfies the requirement OpenGL (from versions: )
No matching distribution found for OpenGL
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Recommended Posts