Как вставить 3D GLViewWidget в окно, содержащее 2d графики PyQtGraph - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь перенести некоторый код печати с matplotlib на pyqtgraph для повышения производительности.Примеры pyqtgraph дают отдельные примеры 2d-графиков и 3d-графиков, но мне не удалось найти образец 3D-графика, встроенного в виде субплота в окне 2D-графика.Я попытался встроить GLViewWidget в GraphicsWindow, как показано ниже.Что происходит, так это то, что я могу получить несколько 2D-графиков или несколько встроенных трехмерных GLViewWidget, но не оба вместе.Как только я добавляю 2d виджеты в макет, они полностью доминируют, и я не вижу 3d виджетов.

Я также попытался добавить виджет QGroupBox с его собственным макетом и добавить к нему 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_()

1 Ответ

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

"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_()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...