PyqtGraph RemoveItem удаляет только последнюю строку - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю над DAQ GUI. Во время сбора тестовых данных пользователь может выбирать между PlotWidgets для отображения графика. Это делается путем выбора флажков для графиков. Если флажок не установлен, данные этого канала не будут отображаться ни на одном графике.

Проблема в том, что когда я использую функцию RemoveItem () или table1.clear (), удаляется только последняя строка. Остальная часть кривой остается.

Совместное использование рабочей части проблемы.

class Ui_Dialog(object):
def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(838, 688)
    self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
    self.buttonBox.setGeometry(QtCore.QRect(470, 640, 341, 32))
    self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
    self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
    self.buttonBox.setObjectName("buttonBox")

    font = QtGui.QFont()
    font.setPointSize(10)
    Dialog.setFont(font)


    self.pushButton=QtWidgets.QPushButton(Dialog)
    self.buttonBox.setGeometry(QtCore.QRect(600, 1000, 50, 32))
    self.pushButton.setFont(font)
    self.pushButton.setText("remove line")
    self.pushButton.setObjectName("pushButton_3")



    pg.setConfigOption('background', 'w')
    self.graphicsView = pg.PlotWidget(parent=Dialog)
    self.graphicsView.showGrid(x=True,y=True)
    self.graphicsView.setGeometry(QtCore.QRect(170, 140, 541, 321))
    pg.getConfigOption('foreground')
    self.graphicsView.setLabel('left', 'Temperature', 'C')
    self.graphicsView.setLabel('bottom', 'Time', 's')

    self.graphicsView.setObjectName("graphicsView")
    self.graphicsView.enableAutoRange(enable=True)
    self.graphicsView.setXRange(0,20,padding=0)        
    self.retranslateUi(Dialog)
    self.buttonBox.accepted.connect(Dialog.accept)
    self.buttonBox.accepted.connect(Dialog.reject)
    self.pushButton.clicked.connect(self.removeline)
    QtCore.QMetaObject.connectSlotsByName(Dialog)


def removeline(self):

    try: 
        self.graphicsView.plotItem.removeItem(table1)   

    except Exception as e:
        print(str(e))

def callfunc(self,val):

     process_delta=time.time()-val
     t=threading.Timer(1-process_delta,Ui_Dialog.update,args=(self,))
     t.daemon=True
     t.start()

def update(self):
    global count
    global table1
    table1=None
    process_start=time.time() 
    vals=int(time.time()-start)
    x_t.append(vals)
    y.append(count+1)

    pen = pg.mkPen(QtCore.Qt.black, 1, QtCore.Qt.SolidLine)

    table1=self.graphicsView.plot(x_t,y,pen=pen)
    QtCore.QCoreApplication.processEvents()

    count += 1
    self.callfunc(process_start)


def retranslateUi(self, Dialog):
    _translate = QtCore.QCoreApplication.translate
    Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    start=time.time()
    Dialog.show()
    count=0
    x_t=[]
    y=[]
    vals=[]
    ui.update()
    sys.exit(app.exec_())
...