我收到了错误
QPixmap:在GUI线程之外使用pixmaps是不安全的
在Eclipse中使用PyDev在ipython
- shell中的Seaborn中手动输入以下语句时:
import matplotlib.pyplot as mpl
import seaborn as sns
import pandas as pd
import numpy as np
# Turn interactive mode off:
mpl.ioff()
# Create some example Data:
df = pd.DataFrame({'A':np.random.rand(20),'B':np.random.rand(20)})
# Create seaborn PairGrid instance:
pg = sns.PairGrid(df)
此时,我用一个点继续最后一个语句,例如链式map()
- 方法,如下所示:
pg = sns.PairGrid(df).
然后Eclipse试图显示所有可能完成的弹出窗口,但弹出窗口立即关闭,控制台正在填充上述错误,准确地说是42行。
我可以继续这样做而没有问题:
gp = sns.PairGrid(df).map(mpl.scatter)
gp.fig.show()
我的情节很好。
执行sns.JointGrid(df.A,df.B).
和sns.FacetGrid(df).
虽然在早些时候玩游戏时我也遇到了控制台被这个错误实际杀死的情况,我只是无法复制导致这个错误的步骤。
在这个网站上进行研究看起来它与线程有关,而我根本就没有使用它。 Seaborn会使用它吗?
我想通过首先创建一个Grid / Figure并稍后进行绘图来创建我的绘图,但是这个错误表明这不是一种安全的做事方式,尽管Seaborn doc说这样做很好:
https://seaborn.github.io/generated/seaborn.FacetGrid.html
编辑:
在Spyder中做同样的事情时我没有收到错误,但在执行gp.fig.show()
时出现此警告:
C:\Anaconda2\lib\site-packages\matplotlib\figure.py:397: UserWarning:
matplotlib is currently using a non-GUI backend, so cannot show the figure
"matplotlib is currently using a non-GUI backend, "
当交互模式关闭时,我没有看到任何图形。使用交互模式我仍然看到警告,但得到图形内联。
但无论如何都没有弹出窗口。在Eclipse中,我得到了错误和弹出窗口。
编辑2:
在Eclipse中将整个事件作为脚本运行不会产生任何错误,只有手动输入如上所述。
答案 0 :(得分:1)
我查看了https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydevconsole.py,问题是PyDev上的代码完成是在辅助线程中触发的,而不是在主(UI)线程中。
即:交互式控制台中的代码完成并不期望它会触及实际与gui交互的代码。
为了使其正常工作,必须将完成命令排队等待主线程(因为常规命令排队)并且线程必须等待它完成然后返回其值。
请在PyDev跟踪器中报告此问题:https://www.brainwy.com/tracker/PyDev/(即:交互式控制台中的代码完成应在UI线程中进行)。