pyqtgraph: Как связать два окна PlotWidget, чтобы показать один и тот же график? - PullRequest
0 голосов
/ 24 ноября 2018

Я занимаюсь разработкой инструмента орбитального анализа с использованием PyQT5 и pyqtgraph!

См .: https://github.com/3fon3fonov/trifon

Мой инструмент имеет область построения с ~ 15 графиками, показанными в разных окнах вкладок, которые показываютразличные аспекты анализа данных.

Сам инструмент собран из Designer-qt5, а виджеты QGraphicView повышены до PlotWidgets pyqtgraphs

Например, в gui.py я инициализируюграфики, подобные этому:

def initialize_plots(self):
    global p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,pe
    p1  = self.graphicsView_timeseries_RV
    p2  = self.graphicsView_timeseries_RV_o_c
    p3  = self.graphicsView_timeseries_phot
    p4  = self.graphicsView_timeseries_phot_o_c
    p5  = self.graphicsView_timeseries_activity
    p6  = self.graphicsView_timeseries_correlations
    # ...
    pe  = self.graphicsView_extra_plot
    # ...

, поэтому p1-p6 в этом случае - это разные объекты PlotWidget, в которые я добавляю данные Items / Plot, т.е. p1.plot (x, y), p1.addItem () и т. д..

Я хочу связать pe с любым из p1-p6 !.pe - это дополнительный сюжет, поэтому пользователь может выбирать из уже доступных / созданных.Таким образом, пользователь может выбрать, какой график он / она хочет видеть рядом с основным графиком.

Давайте представим, что раскрывающееся меню ComboBox выбирает объекты p1-p6, поэтому

pe = p1,или позже: pe = p4

, например.

Есть ли способ сделать это с PyQtgraph?

Я действительно пробовал все добрые вещи в последние две недели икажется, ничего не работает.

Мне известно о

pe.setXLink(p1)
pe.setYLink(p2)

, но это связывает только оси, а не сам объект графика.Это не работает для меня.

1 Ответ

0 голосов
/ 27 ноября 2018

Я реализовал нечто подобное, используя Docks и DockArea.Я просто добавил несколько доков, сложенных друг под другом.Они могут быть показаны с помощью либо щелчка по меткам, либо с помощью метода liftDock () каждого дока.

Вы можете просто добавить PlotWidget (или любой другой виджет) в док, используя метод addWidget ()каждого дока.Метки могут быть скрыты или заблокированы, если вы не хотите, чтобы пользователь мог перемещать доки во время выполнения.

import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
from pyqtgraph.dockarea import DockArea, Dock

class Accel_GUI():
    def __init__(self, window, dock_area):
        self.testing = 0
        self.pen = pg.mkPen(color='y')
        """Setup the UI"""
        self.window = window
        self.dock_area = dock_area
        self.window.setCentralWidget(self.dock_area)
        self.spec_dock = []
        self.spec_dock.append(Dock("Spectro 1",
                                   size=(1200, 600),
                                  autoOrientation=False))
        self.spec_dock.append(Dock("Spectro 2",
                                   size=(1200, 600),
                               autoOrientation=False))
        self.dock_area.addDock(self.spec_dock[0], "top")
        self.dock_area.addDock(self.spec_dock[1], "below", self.spec_dock[0])

if __name__ == "__main__":
    app = QtGui.QApplication.instance()
    if app is None:
        app = QtGui.QApplication(argv)
    win = QtGui.QMainWindow()
    area = DockArea()
    pyqtplot = Accel_GUI(win, area)
    win.show()
    app.exec_()

В библиотеке pyqtgraph также есть пример, показывающий, как работать с доками.

...