Как удалить линию в 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 шт):
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()

