2016-10-19 10 views
0

私はエラーになっていますPyDevは自動補完ポップアップでPyDevはSeaborn:「QPixmapの:GUIスレッド外ピックスマップを使用しても安全ではない」

QPixmapの:外のピックスマップを使用することは安全ではありませんGUIスレッド

手動EclipseでPyDevはを用い-shell ipythonで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) 

私は最後のステートメントをドットで続けます。

pg = sns.PairGrid(df). 

その後、Eclipseはすべての補完のポップアップを表示しようとしているが、そのポップアップがすぐに閉じてきていると、コンソールは、前述のエラーでそれの42行を埋めなっている。このようなチェーンmap() -method、正確である。

私は継続して問題なくこれを行うことができます。

gp = sns.PairGrid(df).map(mpl.scatter) 
gp.fig.show() 

そして私は、私のプロットだけで罰金を取得。 sns.JointGrid(df.A,df.B).

sns.FacetGrid(df).周りに早く遊んで、私はまた、コンソールが実際にこのエラーによって殺されたような状況になっている間に行っているとき

同じことが起こる、私はもうこれにつながるステップを複製することはできません。

私はこのサイトを調べても、まったく使用していないスレッディングと同じように見えます。シーボーンはそれを使用していますか?

グリッド/フィギュアを作成して後でプロットすることでプロットを作成したいのですが、このエラーは、これが安全な方法ではないことを示唆していますが、Seabornのドキュメントでは、 :

https://seaborn.github.io/generated/seaborn.FacetGrid.html

EDIT:

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では、エラーとポップアップの両方が表示されます。

EDIT 2:Eclipseのスクリプトでエラーが発生しないよう

は全部を実行すると、前述のように入力するだけでマニュアルはありません。

+1

これは実際にはeclipse/pydevのようなものです。あなたはコンソールでこの同じ警告を受け取りますか? –

+0

ええ、私はインスタンスオブジェクトの属性を得ることができるように 'sns.Pairgrid(df)'を評価しているスレッドがあると仮定しますが、そのスレッド(私の知識を超えているため)はプロットをしようとするとクラッシュします。 – mwaskom

+0

@ Paul-H:提案していただきありがとうございます、私は新しい情報で自分の投稿を編集します。 – Khris

答えて

1

私はhttps://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydevconsole.pyを見ました。問題は、メイン(UI)スレッドではなく、セカンダリスレッドでPyDevのコード補完がトリガされていることです。

I.e.:対話型コンソールのコード補完は、GUIと実際にやり取りするコードに触れることを期待していません。

これを実行するには、(通常のコマンドがキューに入れられるように)完了コマンドをメインスレッド用にキューに入れ、スレッドが完了して値を返すのを待たなければなりません。

これはPyDevトラッカーの問題として報告してください:https://www.brainwy.com/tracker/PyDev/(対話型コンソールのコード補完はUIスレッドで行われる必要があります)。

+0

それについて説明します、ありがとうございます。私はどこか別のアカウントを作成して何かを報告したくはありません。あまりにもあなたのgithubサイトで報告することはできません悪い。 – Khris

+0

トラッカーは、Google、GitHub、Facebook、Yahooの既存のアカウントを使用するだけで、別のアカウントを作成するオプションもありません。 GitHubトラッカーは理想的なIMHOから遠いです。 –

関連する問題