IPython + matplotlib上的自动完成导致'RuntimeError:不在主循环中的主线程'

时间:2017-09-08 07:50:15

标签: python-3.x matplotlib ipython tk

我正在使用Ipython3绘制一些数据,使用默认的matplotlib后端'TKAgg'和virtualenv。我有一个plot_script绘制我的数据显示在一个新窗口,它工作了一段时间。然后有点随机,当我使用tab来自动填充一个语句时,它会抛出我在链接图片中看到的错误消息。当我使用Agg后端时它会偏离正常但由于我需要检查数据(放大等),这变得非常繁琐。

Screenshot of the Ipython Window

我意识到我可能不理解线程是如何工作的,但是在使用plot_script中非常简单的函数时,不应该有办法获得GUI窗口。基本上,我只是使用plot_script.plot_something(pd.DataFrame)调用该函数,并且图表是diplayed:

from matplotlib import pyplot as plt

def plot_something(data):
    fig, ax = plt.subplots(2,2)
    .... # Plot something
    fig.savefig()     
    plt.show()

    plt.close(fig)
    fig.clear()       

如何将我的绘图移动到主循环,这是ipython的一个问题?

1 个答案:

答案 0 :(得分:1)

您可能需要激活正确的matplotlib& tk eventloop。在一般情况下,可以使用%gui magic%gui tk来完成此操作,对于matplotlib,可以通过%matplotlib magic完成一些额外设置,可能在您的情况下使用{{1} }}

还有很多其他库可以触发这种问题,但还没有答案,特别是使用OpenCV与终端IPython可以使主线程出现恐慌,但不是以可重现的方式,还没有调试和修复。

如果使用魔法没有解决它,请随时在IPython跟踪器上打开一个错误。