Как удалить линию в pyqtgraph, добавленную с помощью addline

Я создал некий checkbox и хочу чтобы он контролировал появление и исчезание прямых линий.
Я создавал линии с помощью addline, так как там было просто на нее еще поставить текстовую метку.

С добавлением проблем нет, а вот с убиранием ее - есть.
Метод removeItem не хочет работать. Хотя, может я его не правильно использую.

main.py

from PyQt5.QtWidgets import *
from mainwin import Ui_MainWindow
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import sys  # We need sys so that we can pass argv to QApplication
import os


class mywindow(QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # self.view = view = PlotWidget()
        self.view = view = pg.PlotWidget()
        self.view.setBackground('w')
        self.view.showGrid(x=True, y=True)
        self.hintList = []

        self.ui.pushButton.setText('Откройте файл: Файл -> Открыть')

        self.gridCheck = QGridLayout()
        self.checkLog = QCheckBox('Делать лог')
        self.checkGraf = QCheckBox('Показывать график')
        self.checkMarks = QCheckBox('Показывать метки')
        self.checkMarks.stateChanged.connect(self.showMarks)
        self.gridCheck.addWidget(self.checkLog, 0, 0)
        self.gridCheck.addWidget(self.checkGraf, 0, 1)
        self.gridCheck.addWidget(self.checkMarks, 0, 2)

        self.ui.gridLayout.addLayout(self.gridCheck, 3, 1)
        self.ui.gridLayout.addWidget(self.view, 4, 1)

        hour = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        temperature = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]

        self.view.setBackground('w')

        pen = pg.mkPen(color=(255, 0, 0))
        self.view.plot(hour, temperature, pen=pen)

    def showMarks(self):
        lines = []
        if self.checkMarks.isChecked():
            lines.append(self.view.addLine(x=1))
            lines.append(self.view.addLine(x=3))
            lines.append(self.view.addLine(x=6))

            for l in lines:
                self.view.addItem(l)
        else:
            for l in lines:
                self.view.removeItem(l)



def main():
    app = QApplication(sys.argv)
    main = mywindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

        else:
            for l in lines:
                self.view.removeItem(l)

mainwin.py:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1033, 737)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 1, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout.addWidget(self.progressBar, 0, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1033, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.openFile = QtWidgets.QAction(MainWindow)
        self.openFile.setCheckable(False)
        self.openFile.setChecked(False)
        self.openFile.setObjectName("openFile")
        self.menu.addAction(self.openFile)
        self.menubar.addAction(self.menu.menuAction())

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.menu.setTitle(_translate("MainWindow", "Файл"))
        self.openFile.setText(_translate("MainWindow", "Открыть"))

Программа урезанная, специально чтобы остался функционал одного чекбатона "Показать метки".


Ответы (1 шт):

Автор решения: S. Nick

addLine(x=None, y=None, z=None, **kwds)

Создайте InfiniteLine и добавьте к графику.
Если x указан, линия будет вертикальной. Если указано y, линия будет горизонтальной.
Все дополнительные аргументы ключевого слова передаются в InfiniteLine.__init__(). Возвращает созданный элемент.

import sys  
# ???import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg


#from mainwin import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(700, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 1, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout.addWidget(self.progressBar, 0, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1033, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.openFile = QtWidgets.QAction(MainWindow)
        self.openFile.setCheckable(False)
        self.openFile.setChecked(False)
        self.openFile.setObjectName("openFile")
        self.menu.addAction(self.openFile)
        self.menubar.addAction(self.menu.menuAction())

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.menu.setTitle(_translate("MainWindow", "Файл"))
        self.openFile.setText(_translate("MainWindow", "Открыть"))


class mywindow(QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.view = pg.PlotWidget()        
        
        self.view.setBackground('w')
        self.view.showGrid(x=True, y=True)
        self.hintList = []

        self.ui.pushButton.setText('Откройте файл: Файл -> Открыть')

        self.gridCheck = QGridLayout()
        self.checkLog = QCheckBox('Делать лог')
        self.checkGraf = QCheckBox('Показывать график')
        self.checkMarks = QCheckBox('Показывать метки')
        
        self.checkMarks.stateChanged.connect(self.showMarks)
        
        self.gridCheck.addWidget(self.checkLog, 0, 0)
        self.gridCheck.addWidget(self.checkGraf, 0, 1)
        self.gridCheck.addWidget(self.checkMarks, 0, 2)

        self.ui.gridLayout.addLayout(self.gridCheck, 3, 1)
        self.ui.gridLayout.addWidget(self.view, 4, 1)

        hour = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        temperature = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]

        self.view.setBackground('w')

        pen = pg.mkPen(color=(255, 0, 0))
        self.view.plot(hour, temperature, pen=pen)

# ----> vvvvv
        self.lines = []                                              # +++ 

    def showMarks(self):
#        lines = []                                                  # ???
        if self.checkMarks.isChecked():
            self.lines = []                                          # +++
            
            self.lines.append(self.view.addLine(x=1))
            self.lines.append(self.view.addLine(x=3))
            self.lines.append(self.view.addLine(x=6))

#            for line in self.lines:                                 # ???
#                self.view.addItem(line)                             # ???
        else:
            for line in self.lines:
                self.view.removeItem(line)


def main():
    app = QApplication(sys.argv)
    main = mywindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка