Python matplotlib:Qt4Agg工具栏';这是一只令人讨厌的虫子

Python matplotlib:Qt4Agg工具栏';这是一只令人讨厌的虫子,python,matplotlib,toolbar,Python,Matplotlib,Toolbar,我使用Qt4Agg(PyQt4)作为在matplotlib中渲染绘图的后端。这是一个非常有用的工具栏,带有一个非常有用的按钮“编辑曲线和轴参数”。然而,每当我按下它,它就会给出一个错误。(我知道它很有用,因为它适用于条形图,但不适用于直线图:P) 在下图中可以清楚地看到原因和追溯 我认为这可能是matplotlib当前版本的一个bug,所以我在matplotlib的最新版本上尝试了这一点,但仍然给出了相同的错误 这是给出相同错误的最简单脚本(绘图与上面不同)- (我已经通过配置文件/etc/m

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

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

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

这是给出相同错误的最简单脚本(绘图与上面不同)-

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


请帮助我解决此问题。

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

该错误似乎位于
matplotlib/backends/qt4\u editor/FormWidget.py
中的
FormWidget.setup()
方法的某个部分内。在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版中已修复。我刚刚下载并安装了此版本,无法再重现此问题。

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

该错误似乎位于
matplotlib/backends/qt4\u editor/FormWidget.py
中的
FormWidget.setup()
方法的某个部分内。在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版中已修复。我刚刚下载并安装了此版本,无法再重现此问题。

谢谢Luke:)。当我在Ubuntu12.04机器上测试它时,我以为我有了最新的版本,但事实并非如此。这是1.1.1rc。所以我刚从github安装了最新版本,现在它工作得非常好!谢谢。谢谢卢克:)。当我在Ubuntu12.04机器上测试它时,我以为我有了最新的版本,但事实并非如此。这是1.1.1rc。所以我刚从github安装了最新版本,现在它工作得非常好!非常感谢。