pyqtgraph - pyqtgraph:如何链接两个 PlotWidget 窗口以显示相同的绘图?
问题描述
我正在使用 PyQT5 和 pyqtgraph 开发一个轨道分析工具!
见:https ://github.com/3fon3fonov/trifon
我的工具有一个绘图区域,在不同的选项卡窗口中显示了大约 15 个绘图,这些绘图显示了数据分析的不同方面。
它自己的工具是用 Designer-qt5 组装的,而 QGraphicView 小部件被提升为 pyqtgraphs 的 PlotWidgets
例如,在 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)
但这仅链接轴而不是绘图对象本身。它对我不起作用。
解决方案
我使用 Docks 和 DockArea 实现了类似的东西。我只是添加了几个堆叠在彼此下方的码头。它们可以通过单击标签或使用每个停靠点的 raiseDock() 方法来显示。
您可以使用每个扩展坞的 addWidget() 方法简单地将 PlotWidget(或任何其他小部件)添加到扩展坞。如果您不希望用户能够在运行时移动停靠点,则可以隐藏或锁定标签。
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 库中还有一个示例,展示了如何使用停靠点。
推荐阅读
- python - Python可以使用不同的格式化程序将日志记录到同一个文件中吗
- azure - 多个 Azure 区域上的 Azure AD DS
- java - 将本机查询重构为 JPQL 查询
- linux - 通过虚拟零调制解调器连接的两个真实串行端口(在 linux 或 windows 中)
- git - 在 vsts 环境中将 git 作为源代码,是否可以克隆子文件夹并将其从一个存储库推送到另一个存储库?
- python - 无法将 python 解释器安装到 /System/Library/Frameworks/
- mysql - 如何在设置 WordPress 的配置时访问 mysql 数据库详细信息以输入?
- python - python替换捕获组值
- python - 多重继承与多重导入语句之间是否存在性能差异?
- angular - Angular 自定义验证器错误(预期验证器返回 Promise 或 Observable)