首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyqtgraph:如何链接两个PlotWidget窗口来显示相同的绘图?

pyqtgraph:如何链接两个PlotWidget窗口来显示相同的绘图?
EN

Stack Overflow用户
提问于 2018-11-25 00:42:48
回答 1查看 857关注 0票数 0

我正在用PyQT5和pyqtgraph开发一个轨道分析工具!

请参阅:https://github.com/3fon3fonov/trifon

我的工具有一个绘图区域,其中大约15个绘图显示在不同的选项卡窗口中,这些窗口显示了数据分析的不同方面。

工具本身是用Designer-qt5组装的,而QGraphicView小部件则被提升为pyqtgraph的PlotWidgets

例如,在gui.py中,我像这样初始化绘图:

代码语言:javascript
复制
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对象,即p1.plot(x,y)、p1.addItem()等。

我想要的是将pe链接到p1-p6中的任何一个!pe是一个额外的绘图,因此用户可以从那些已经可用/已创建的绘图中进行选择。因此,用户可以选择他/她想要在主图旁边看到的图。

假设ComboBox下拉菜单在p1-p6对象之间进行选择,因此

pe = p1或更高版本:pe = p4

例如。

有没有办法用PyQtgraph来完成这件事?

在过去的两周里,我真的尝试了所有好的方法,但似乎都不起作用。

我意识到了

代码语言:javascript
复制
pe.setXLink(p1)
pe.setYLink(p2)

但这只链接了轴,而不是绘图对象本身。这对我不起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-11-27 22:43:08

我使用Dock和DockArea实现了类似的东西。我只是简单地添加了几个堆叠在一起的码头。它们可以通过单击标签或使用每个停靠的raiseDock()方法来显示。

您只需使用每个dock的addWidget()方法将PlotWidget (或任何其他小部件)添加到dock。如果您不希望用户在运行时能够移动停靠,则可以隐藏或锁定标签。

代码语言:javascript
复制
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库中还有一个示例,展示了如何使用docks。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53460265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档