繁体   English   中英

pyqtgraph 中有没有办法设置一个级别,例如 FillBetweenItem?

[英]Is there a way in pyqtgraph to set a level of e.g. a FillBetweenItem?

在我的应用程序中,我有很多来自不同类型的不同 FillBetweenItems,我不想每次都删除并再次绘制所有项目。 我想使用curve1.setData() 和curve2.setData()。 对于每个类,我想设置一个级别:例如,class1 的 FillBetweenItem 应始终位于 class2 的 FillBetweenItem 之上。 而 Class3 总是在 class2 之下。 有什么我想念的吗?

import pyqtgraph as pg

class RedClass:
    def __init__(self, ax = None):
        self.ax = ax
        self.lowerCurve = None
        self.upperCurve = None
        self.fillItem = None
    def draw(self, ax = None):
        pen = pg.mkPen(None)
        if self.lowerCurve is None:
            self.lowerCurve = self.ax.plot([1,2],[1,1], pen = pen)
        else:
            self.lowerCurve.setData(x = [1,2], y =  [1,1])
        if self.upperCurve is None:
            self.upperCurve = self.ax.plot([1,2],[3,3], pen = pen)
        else:
            self.upperCurve.setData(x = [1,2],y =  [3,3])
        if self.fillItem is None:

            self.fillItem = pg.FillBetweenItem(self.lowerCurve, self.upperCurve, brush = pg.mkBrush('r'))
            self.ax.addItem(self.fillItem)
class GreenClass:
    def __init__(self, ax = None):
        self.ax = ax
        self.lowerCurve = None
        self.upperCurve = None
        self.fillItem = None
    def draw(self):
        pen = pg.mkPen(None)
        if self.lowerCurve is None:
            self.lowerCurve = self.ax.plot([1.5,2.5],[1.5,1.5], pen = pen)
        else:
            self.lowerCurve.setData(x =[1.5,2.5], y =  [1.5,1.5])
        if self.upperCurve is None:
            self.upperCurve = self.ax.plot([1.5,2.5],[2.5,2.5], pen = pen)
        else:
            self.upperCurve.setData(x = [1.5,2.5],y = [2.5,2.5])
        if self.fillItem is None:
            self.fillItem = pg.FillBetweenItem(self.lowerCurve, self.upperCurve, brush = pg.mkBrush('g'))
            self.ax.addItem(self.fillItem)


if __name__ == '__main__':
    from PySide2.QtWidgets import QApplication
    import sys
    app = QApplication(sys.argv) 
    ax = pg.PlotWidget()
    greenOne = GreenClass(ax = ax)
    redOne = RedClass(ax = ax)
    #time of draw call determines which class is plotted on top
    redOne.draw()
    greenOne.draw()
    ax.show()
    sys.exit(app.exec_())

这取决于我是先调用 redOne.draw() 还是先调用 greenOne.draw() 顶部会显示什么颜色:

在此处输入图片说明

有没有办法设置例如级别,使 redclass 的 Fillbetween 项目始终位于绿色项目之上? 还是我必须照顾每一件物品?

您必须设置 ZValue:具有较高 ZValue 的项目将始终位于具有较低 ZValue 的项目之前:

# ...
redOne.draw()
greenOne.draw()

greenOne.fillItem.setZValue(0) redOne.fillItem.setZValue(1)

ax.show()
# ...

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM