繁体   English   中英

PyDev Seaborn在Eclipse中:“ PyDev自动完成”弹出窗口上的“ QPixmap:在GUI线程外使用像素图并不安全”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM