我正在尝试将一些绘图代码从matplotlib移植到pyqtgraph以提高性能。 pyqtgraph示例分别提供了2d图和3d图的示例,但是我无法找到作为2d图窗口中的子图嵌入的3d图的样本。 我尝试将GLViewWidget嵌入到GraphicsWindow中,如下所示。发生的是,我可以嵌入多个2d图或多个3d GLViewWidgets,但不能同时嵌入两者。一旦将2d小部件添加到布局中,它们便会完全占据主导地位,而我看不到3d小部件。
我还尝试添加具有自己布局的QGroupBox小部件,并向其中添加3d小部件,甚至尝试设置组框和3d小部件的最小宽度,这些似乎都没有帮助。
我正在使用Anaconda 3:
pyqt 5.6.0 py37ha878b3d_6
pyqtgraph 0.10.0 py37h28b3542_3
python 3.7.0
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
import pyqtgraph.opengl as gl
app = QtGui.QApplication([])
win = pg.GraphicsWindow(title="A 2d plot window")
p1 = pg.PlotWidget()
# try adding a 3d plot
glvw = gl.GLViewWidget()
z = pg.gaussianFilter(np.random.normal(size=(50,50)), (1,1))
p13d = gl.GLSurfacePlotItem(z=z, shader='shaded', color=(0.5, 0.5, 1, 1))
glvw.addItem(p13d)
# get a layout
layoutgb = QtGui.QGridLayout()
win.setLayout(layoutgb)
layoutgb.addWidget(glvw, 0, 0)
# layoutgb.addWidget(p1, 0, 1) ### uncommenting this line causes
#the plot widget to appear and the 3d widget to disappear
QtGui.QApplication.instance().exec_()
答案 0 :(得分:0)
“ PlotWidget具有更积极的默认设置,因为它继承自QGraphicsView”-source我还没有了解PyQT(Graph)和OpenGL,所以很抱歉我不能多说,但是这些3行代码可以解决您的激励示例:
p1.sizeHint = lambda: pg.QtCore.QSize(100, 100)
glvw.sizeHint = lambda: pg.QtCore.QSize(100, 100)
glvw.setSizePolicy(p1.sizePolicy())
如:
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
import pyqtgraph.opengl as gl
app = QtGui.QApplication([])
win = pg.GraphicsWindow(title="A 2d plot window")
p1 = pg.PlotWidget()
# try adding a 3d plot
glvw = gl.GLViewWidget()
z = pg.gaussianFilter(np.random.normal(size=(50,50)), (1,1))
p13d = gl.GLSurfacePlotItem(z=z, shader='shaded', color=(0.5, 0.5, 1, 1))
glvw.addItem(p13d)
# get a layout
layoutgb = QtGui.QGridLayout()
win.setLayout(layoutgb)
layoutgb.addWidget(glvw, 0, 0)
layoutgb.addWidget(p1, 0, 1) ### uncommenting this line causes
# the plot widget to appear and the 3d widget to disappear
p1.sizeHint = lambda: pg.QtCore.QSize(100, 100)
glvw.sizeHint = lambda: pg.QtCore.QSize(100, 100)
glvw.setSizePolicy(p1.sizePolicy())
QtGui.QApplication.instance().exec_()