
[英]How to suppress warning 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:在GUI线程外使用像素图并不安全
在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.JointGrid(df.A,df.B).
发生相同的情况sns.JointGrid(df.A,df.B).
和sns.FacetGrid(df).
早些时候玩游戏时,我还遇到了控制台实际上被此错误杀死的情况,但我无法再重复导致该错误的步骤。
在此站点上进行研究似乎与它完全没有使用的线程有关。 Seaborn是否使用它?
我想通过首先创建表格/图形并稍后进行绘制来创建我的图,但是此错误表明这不是一种安全的方法,尽管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交互的代码。
为此,必须将完成命令排入主线程的队列(因为常规命令已排入队列),并且线程必须等待其完成以返回其值。
请在PyDev跟踪器中将此问题报告为问题: https : //www.brainwy.com/tracker/PyDev/ (即,交互式控制台中的代码完成应在UI线程中发生)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.