Eclipse 中的 PyDev Seaborn:PyDev 自动完成弹出窗口上的 "QPixmap: It is not safe to use pixmaps outside the GUI thread"
PyDev Seaborn in Eclipse: "QPixmap: It is not safe to use pixmaps outside the GUI thread" on PyDev autocompletion popup
我遇到了错误
QPixmap: It is not safe to use pixmaps outside the GUI thread
在 ipython
-shell 中使用 PyDev 在 Eclipse 中手动在 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 文档说这样做很好是这样的:
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 中作为脚本的整个过程不会产生任何错误,只有如上所述的手动输入才会产生错误。
我查看了 https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydevconsole.py,问题是 PyDev 上的代码完成是在辅助线程中触发的,而不是在主 (UI) 线程中触发的。
即:交互式控制台中的代码完成并不期望它会触及实际与 gui 交互的代码。
为此,完成命令必须在主线程排队(因为常规命令排队)并且线程必须等待它完成然后 return 它的值。
请在 PyDev 跟踪器中将此作为问题报告:https://www.brainwy.com/tracker/PyDev/(即:交互式控制台中的代码完成应发生在 UI 线程中)。
我遇到了错误
QPixmap: It is not safe to use pixmaps outside the GUI thread
在 ipython
-shell 中使用 PyDev 在 Eclipse 中手动在 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 文档说这样做很好是这样的:
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 中作为脚本的整个过程不会产生任何错误,只有如上所述的手动输入才会产生错误。
我查看了 https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydevconsole.py,问题是 PyDev 上的代码完成是在辅助线程中触发的,而不是在主 (UI) 线程中触发的。
即:交互式控制台中的代码完成并不期望它会触及实际与 gui 交互的代码。
为此,完成命令必须在主线程排队(因为常规命令排队)并且线程必须等待它完成然后 return 它的值。
请在 PyDev 跟踪器中将此作为问题报告:https://www.brainwy.com/tracker/PyDev/(即:交互式控制台中的代码完成应发生在 UI 线程中)。