'ScatterPlotItem' 对象没有属性 'geometryChanged'

'ScatterPlotItem' object has no attribute 'geometryChanged'

我想创建一个 1D 波可视化,我使用 pyqtgraph 和 pyqt 进行可视化和 gui,但是当我尝试向我的绘图添加散点时,我收到以下错误,但是添加绘图方法没有问题我已经阅读了文档,但似乎无法解决我的问题

Traceback (most recent call last):
  File "c:/Users/JF/Desktop/project physics/test.py", line 96, in <module>
    create()
  File "c:/Users/JF/Desktop/project physics/test.py", line 78, in create
    ui.w.addItem(scatter ,row=None, col=None, rowspan=1, colspan=1)
  File "C:\Users\JF\AppData\Local\Programs\Python\Python38\lib\site-packages\pyqtgraph\graphicsItems\GraphicsLayout.py", line 134, in addItem
    item.geometryChanged.connect(self._updateItemBorder)
AttributeError: 'ScatterPlotItem' object has no attribute 'geometryChanged'


这是我的代码

import pyqtgraph as pg
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.parametre = QtWidgets.QGroupBox(self.centralwidget)
        self.parametre.setGeometry(QtCore.QRect(10, 10, 181, 171))
        self.parametre.setObjectName("parametre")
        self.fequence_edit = QtWidgets.QLineEdit(self.parametre)
        self.fequence_edit.setGeometry(QtCore.QRect(112, 30, 61, 20))
        self.fequence_edit.setObjectName("fequence_edit")
        self.amplitude_edit = QtWidgets.QLineEdit(self.parametre)
        self.amplitude_edit.setGeometry(QtCore.QRect(112, 80, 61, 20))
        self.amplitude_edit.setObjectName("amplitude_edit")
        self.wave_lenght_edit = QtWidgets.QLineEdit(self.parametre)
        self.wave_lenght_edit.setGeometry(QtCore.QRect(112, 130, 61, 20))
        self.wave_lenght_edit.setObjectName("wave_lenght_edit")
        self.frequence = QtWidgets.QLabel(self.parametre)
        self.frequence.setGeometry(QtCore.QRect(10, 30, 71, 16))
        self.frequence.setObjectName("frequence")
        self.amplitude = QtWidgets.QLabel(self.parametre)
        self.amplitude.setGeometry(QtCore.QRect(10, 80, 47, 13))
        self.amplitude.setObjectName("amplitude")
        self.wavelenght = QtWidgets.QLabel(self.parametre)
        self.wavelenght.setGeometry(QtCore.QRect(10, 130, 61, 16))
        self.wavelenght.setObjectName("wavelenght")
        self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
        self.graphicsView.setGeometry(QtCore.QRect(200, 0, 601, 601))
        self.graphicsView.setObjectName("graphicsView")


        self.w = pg.GraphicsLayoutWidget(self.graphicsView)
        self.w.setGeometry(QtCore.QRect(0, 0, 601, 601))
        self.w.setObjectName("graph")

        
        MainWindow.setCentralWidget(self.centralwidget)
        

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.parametre.setTitle(_translate("MainWindow", "parametre"))
        self.frequence.setText(_translate("MainWindow", "frequence"))
        self.amplitude.setText(_translate("MainWindow", "amplitude"))
        self.wavelenght.setText(_translate("MainWindow", "wave length"))






def create():
    x=[1,2,3,4]
    y=[1,2,3,4]


    #line = pg.PlotCurveItem()
    scatter = pg.ScatterPlotItem()


    
    ui.w.addItem(scatter)
    scatter.setData(x,y)

    #plot_1 = ui.w.addPlot(row=0, col=1)
    #plot_1.plot(x,y)
    #v = ui.w.addViewBox(row=0, col=1)
    #pass


if __name__ == "__main__":

    import sys
    #app = QtWidgets.QApplication([])
    app = QtWidgets.QApplication(sys.argv)
    #app.setPalette(palette)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    create()
    MainWindow.show()
    sys.exit(app.exec_())

您不能将 ScatterPlotItem 直接添加到 GraphicsLayoutWidget,但必须使用 PlotItem 作为中介:

def create():
    x = [1, 2, 3, 4]
    y = [1, 2, 3, 4]

    plot_item = ui.w.addPlot()
    scatter_item = pg.ScatterPlotItem()
    scatter_item.setData(x, y)
    plot_item.addItem(scatter_item)