我正在使用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对象,我在上面添加了项目/绘图数据,即p1.plot(x,y),p1.addItem()等。
我想要的是将pe链接到p1-p6!中的任何一个! pe是一个额外的图,因此用户可以从已经可用/创建的图中选择。 因此,用户可以选择他/她想在主图旁边看到的图。
让我们想象一下ComboBox下拉菜单在p1-p6对象之间进行选择,因此
pe = p1
,或更高版本:pe = p4
例如。
使用PyQtgraph有什么办法吗?
在过去的两周里,我真的尝试了所有类似的事情,但似乎没有任何效果。
我知道
pe.setXLink(p1)
pe.setYLink(p2)
但是这仅链接轴而不是打印对象本身。这对我不起作用。
答案 0 :(得分:0)
我使用Docks和DockArea实现了类似的操作。我只是简单地添加了几个彼此堆叠的底座。 可以通过单击标签或使用每个扩展坞的raiseDock()方法来显示它们。
您可以使用每个扩展坞的addWidget()方法将PlotWidget(或任何其他Widget)简单地添加到扩展坞中。 如果您不希望用户在运行时移动底座,则标签可以隐藏或锁定。
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库中还有一个示例,展示了如何使用Dock。