matplotlib:Qt4Agg工具栏的烦人的bug

时间:2012-09-16 09:19:14

标签: python matplotlib toolbar

我使用Qt4Agg(PyQt4)作为matplotlib中渲染图的后端。这有一个非常有用的工具栏,带有一个非常有用的按钮'编辑曲线和轴参数'。但是,每当我按下它时,都会出错。 (我知道它很有用,因为它适用于条形图,但不适用于线图:P)。

下图中可以清楚地看到原因和追溯。

enter image description here

我认为这可能是当前版本的matplotlib的一个错误所以我在相同的最新版本上尝试了这个但它仍然给出了相同的错误。

这是最简单的脚本,它会产生相同的错误(情节与上面不同) -

import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()

(我已通过配置文件/etc/matplotlibrc配置了后端)

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

这确实似乎是matplotlib的Qt4表单编辑器中的一个错误。

错误似乎位于FormWidget.setup() matplotlib/backends/qt4_editor/formwidget.py方法的一部分内。在Windows上的matplotlib 1.1.0(我无法重现该问题)中,它包含以下内容:

        elif isinstance(value, (list, tuple)):
            selindex = value.pop(0)
            field = QComboBox(self)
            if isinstance(value[0], (list, tuple)):
                keys = [ key for key, _val in value ]
                value = [ val for _key, val in value ]
            else:
                keys = value
            field.addItems(value)

Kubuntu Precise上的matplotlib v1.1.1rc(我可以重现这个问题)用

替换上面的第二行
            selindex = list(value).pop(0)

最终,两个版本都不正确。

版本1.1.0方法的问题是它不处理元组(元组是不可变的并且没有pop)方法,并且版本1.1.1rc代码的问题是value的第一个元素应该被删除,但只会从list(value)创建的临时列表中删除。

此错误已在1.1.1版中修复。我刚下载并安装了此版本,无法再重现此问题。