<p>在下文中,我采用了一种更为暴力的方法,同时假设绘制<em>所有</em>曲线所需的时间可以忽略不计:</p>
<pre><code>import numpy as np
import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtWidgets
app = QtWidgets.QApplication(sys.argv)
x = np.linspace(0, 3.14, 100)
y1 = np.sin(x)#Data number 1 associated to checkbox A1
y2 = np.cos(x)#Data number 2 associated to checkbox A2
curves = [y1, y2]
pens = ["r", "y"]
#This function is called whenever the state of checkboxes changes
def plot_curves(state):
plot.clear()
for checkbox, curve, pen in zip(checkboxes, curves, pens):
if checkbox.isChecked():
plot.plot(x, curve, pen=pen)
#A widget to hold all of my future widgets
widget_holder = QtGui.QWidget()
#Making a pyqtgraph plot widget
plot = pg.PlotWidget()
#Setting the layout
layout = QtGui.QGridLayout()
widget_holder.setLayout(layout)
checkboxes = [QtWidgets.QCheckBox() for i in range(2)]
for i, checkbox in enumerate(checkboxes):
checkbox.setText(f"A{i+1}")
checkbox.stateChanged.connect(plot_curves)
layout.addWidget(checkbox, 0, i)
#Adding the widgets to the layout
layout.addWidget(plot, 1, 0, len(checkboxes), 0)
widget_holder.adjustSize()
widget_holder.show()
sys.exit(app.exec_())
</code></pre>
<p>现在您有了一个复选框列表,索引为0的复选框对应于索引为0的<code>curves</code>-列表中的数据。我每次都会绘制所有曲线,这会产生更可读的代码。但是,如果这确实会影响性能,则需要稍微复杂一点</p>
<p>我还尝试添加另一条曲线,结果似乎非常好:</p>
<p><a href="https://i.stack.imgur.com/WBN5P.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/WBN5P.png" alt="Img with three curves"/></a></p>