【问题标题】:Pyqt5 with pyqtgraph building two graphsPyqt5 与 pyqtgraph 构建两个图
【发布时间】:2018-10-08 19:00:43
【问题描述】:

我正在尝试使用 PyQt5 和 pyqtgraph 框架构建应用程序。本质上,我试图将两个图形放在 QMainwindow 内的 QWidget 中。我现在正在进行单元测试,并且很难使用 PlotWidget、GraphicsWindow 或 GraphicsObject 对图形进行编码。基本上两个相同的眼镜将被称为第三类,这将集中在第四类中。这是我目前所拥有的。

import sys
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QApplication)
import pyqtgraph as pg

class CustomPlot(pg.GraphicsObject):
    def __init__(self):
        pg.GraphicsObject.__init__(self)
        self.x = np.random.normal(size=1000) * 1e-5
        self.y = self.x * 500 + 0.005 * np.random.normal(size=1000)
        self.y -= self.y.min() - 1.0
        self.mask = self.x > 1e-15
        self.x = self.x[self.mask]
        self.y = self.y[self.mask]
        self.plot(self.x, self.y, pen='g', symbol='o', symbolPen='g', symbolSize=1))

# a class for the second plot to be displayed underneath the first via 
# QVBoxLayout

class CustomPlot1(pg.GraphicsObject):
    def __init__(self):
        pg.GraphicsObject.__init__(self)
        self.x = np.random.normal(size=1000) * 1e-5 #
        self.y = self.x * 750 + 0.005 * np.random.normal(size=1000)
        self.y -= self.y.min() - 1.0
        self.mask = self.x > 1e-15
        self.x = self.x[self.mask]
        self.y = self.y[self.mask]
        self.plot(self.x, self.y, pen='g', symbol='t', symbolPen='g', symbolSize=1)

# The top container/widget for the graphs
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI() # call the UI set up

    # set up the UI
    def initUI(self):

        self.layout = QVBoxLayout(self) # create the layout
        self.guiplot = pg.PlotWidget() # create an instance of plotwidget 1
        self.guiplot1 = pg.PlotWidget() # create an instance of plotwidget 2
        self.pgcustom = CustomPlot() # class abstract both the classes
        self.pgcustom1 = CustomPlot1() # "" "" ""
        self.layout.addWidget(self.guiplot) # add the first plot widget to the layout
        self.guiplot.addItem(self.pgcustom) # now add the plotItem to the plot widget 
        self.layout.addWidget(self.guiplot1) # add the second plot widget to the layout


        self.guiplot1.addItem(self.pgcustom1)  # now add the plotItem to the plot widget 
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())

我应该将 PlotWidget 改为 GraphicsObject 类吗?

【问题讨论】:

    标签: python pyqt pyqt5 pyqtgraph


    【解决方案1】:

    GraphicsObject 没有plot() 方法,你必须做的是从 PlotWidget 继承。每个类都有其功能,在您的情况下,您需要使用 PlotWidget:

    import sys
    from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QApplication)
    import pyqtgraph as pg
    import numpy as np
    
    class CustomPlot(pg.PlotWidget):
        def __init__(self):
            pg.PlotWidget.__init__(self)
            self.x = np.random.normal(size=1000) * 1e-5
            self.y = self.x * 500 + 0.005 * np.random.normal(size=1000)
            self.y -= self.y.min() - 1.0
            self.mask = self.x > 1e-15
            self.x = self.x[self.mask]
            self.y = self.y[self.mask]
            self.plot(self.x, self.y, pen='g', symbol='o', symbolPen='g', symbolSize=1)
    
    # a class for the second plot to be displayed underneath the first via 
    # QVBoxLayout
    
    class CustomPlot1(pg.PlotWidget):
        def __init__(self):
            pg.PlotWidget.__init__(self)
            self.x = np.random.normal(size=1000) * 1e-5 #
            self.y = self.x * 750 + 0.005 * np.random.normal(size=1000)
            self.y -= self.y.min() - 1.0
            self.mask = self.x > 1e-15
            self.x = self.x[self.mask]
            self.y = self.y[self.mask]
            self.plot(self.x, self.y, pen='g', symbol='t', symbolPen='g', symbolSize=1)
    
    # The top container/widget for the graphs
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI() # call the UI set up
    
        # set up the UI
        def initUI(self):
    
            self.layout = QVBoxLayout(self) # create the layout
            self.pgcustom = CustomPlot() # class abstract both the classes
            self.pgcustom1 = CustomPlot1() # "" "" ""
            self.layout.addWidget(self.pgcustom)
            self.layout.addWidget(self.pgcustom1)
            self.show()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Window()
        sys.exit(app.exec_())
    

    输出:

    【讨论】:

    • @oOpSgEo 如果我的回答对您有帮助,请不要忘记将其标记为正确,如果您不知道该怎么做,请查看tour,这是最好的感谢方式。 :D
    猜你喜欢
    • 2019-04-16
    • 2018-01-29
    • 2021-12-27
    • 2019-07-15
    • 2013-09-21
    • 2014-01-19
    • 2021-06-26
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多