我正在尝试在PyQt5 GUI中创建一个交互式4通道条带图,我正在使用matplotlib这样做。我已经将matplotlib图作为窗口小部件嵌入到GUI中,现在我正在尝试使用matplotlib.animate模块以便更新图。在引用我当前添加到轴的线时,我一直得到一个KeyError。除了更新绘图之外,到目前为止,所有功能都按预期运行,所以我只包含我认为相关的代码。
class StripchartBuilder(QtWidgets.QDialog, StripchartDialog.Ui_Dialog):
def __init__(self, ..., parent=None)
self.fig = Figure()
self.ax1 = self.fig.add_subplot(111)
self.addfigure()
self.channels = {'CH 1': {'signal': 'None',
'scale': 'x1',
'cursor': False,
'data': [0],
'line': Line2D(self.tdata, [0], color='r')
},
...
}
self.prevsig{'CH 1': 'None',...}
def addfigure(self):
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.toolbar = NavigationToolbar(self.canvas,
self.mplwindow, coordinates=True)
self.mplvl.addWidget(self.toolbar)
self.mplvl.addWidget(self.canvas)
def update(self, i):
print(self.ax1.lines)
return [self.channels['CH 1']['line']
def addline(self, chan):
self.ax1.add_line(self.channels[chan]['line'])
self.ani = animation.FuncAnimation(self.fig,
self.update,
interval=10,
blit=True)
基本上我的想法是我有4个频道来监控事情。我有一个字典,通道每个键对应一个频道。每个行参数存储一个Line2D对象。当我将数据项标签下的微调器转到“无”之外时,我将关联的线添加到图中。到目前为止,一切似乎都运行正常。我可以添加和删除我喜欢的行,问题是我无法使 animate.FuncAnimation 工作。我基本上已经停止尝试在update方法中做任何事情,因为我根本无法让它运行。
当通过设置其中一个微调器调用 addline 方法时,程序几乎立即抛出一个KeyError,我假设,我从更新方法返回的内容。我在更新中添加了两个打印件,试图尝试调试正在进行的操作。当我打印channels字典和self.ax1.lines时,它们都给了我相同的地址,但我遇到的KeyError试图访问其他东西,它似乎试图做一些完全不同的事情对象类型。
例如:
print(self.ax1.lines)将返回:
[<matplotlib.lines.Line2D object at 0x0000000006F0DD68>]
我收到的KeyError是:
KeyError: <matplotlib.axes._subplots.AxesSubplot object at 0x0000000006D44BE0>
我显然做错了什么,但我不确定那是什么。我应该在更新方法中返回什么?这甚至是问题所在吗?