簡體   English   中英

如何避免PyCharm控制台崩潰“警告:在使用matplotlib進行繪圖時,未在main()線程中創建QApplication?

[英]How to avoid PyCharm console crash “WARNING: QApplication was not created in the main() thread” when plotting with matplotlib?

在PyCharm中,當我嘗試使用其交互式控制台繪制內容時,例如:

In[2]: from matplotlib.pyplot import *
In[3]: x = range(5)
In[4]: y = range(5,10)
In[5]: plot(x,y)
WARNING: QApplication was not created in the main() thread.
Out[5]: [<matplotlib.lines.Line2D at 0x7fade916a438>]
In[6]: show()

它會打開一個窗口並崩潰。 我必須停止控制台並開始一個新的控制台。

錯誤的屏幕截圖

當我在終端的ipython控制台中運行類似的東西時它工作正常,錯誤只發生在Pycharm中。

另一方面,如果導入matplotlib import matplotlib.pyplot as plt它工作正常:

In[2]: import matplotlib.pyplot as plt
In[3]: x = range(5)
In[4]: y = range(5,10)
In[5]: plt.plot(x,y)
Out[5]: [<matplotlib.lines.Line2D at 0x7fd3453b72e8>]
In[6]: plt.show()

但是,如果我同時執行這兩項操作,它也會崩潰(甚至使用plt.plot調用繪圖函數):

In[2]: from matplotlib.pyplot import *
In[3]: import matplotlib.pyplot as plt
In[4]: x = range(5)
In[5]: y = range(5,10)
In[6]: plt.plot(x,y)
WARNING: QApplication was not created in the main() thread.
Out[6]: [<matplotlib.lines.Line2D at 0x7fade916a438>]
In[7]: plt.show()

此外,當我在一個命令中運行它時,它第一次工作。 但如果我試圖繪制另一個時間,它會崩潰:

In[2]: from matplotlib.pyplot import *
  ...: x = range(5)
  ...: y = range(5,10)
  ...: plot(x,y)
  ...: show()
In[3]: plot(x,y)
WARNING: QApplication was not created in the main() thread.
Out[3]: [<matplotlib.lines.Line2D at 0x7fc68a3009e8>]
In[4]: show()

所以它與使用matplotlib庫以及使用*導入以及在第一次導入后在交互式控制台中運行相關。 我知道不建議使用通配符導入,但有時這樣做是為了更快地測試並且不那么冗長。

在網上尋找這個警告,我只發現了這些

哪個沒有多大幫助。 任何人都知道發生了什么以及如何解決它?

眼鏡:

  • PyCharm 2019.1.2(專業版)
  • Build#PY-191.7141.48,建於2019年5月7日
  • JRE:11.0.2 + 9-b159.56 amd64
  • JVM:JetBrains sro的OpenJDK 64位服務器VM
  • Linux 4.15.0-50-通用
  • conda 4.6.14,Python 3.7.3
  • QT5

我把這個問題發給JetBrains: https//youtrack.jetbrains.com/issue/PY-36136

他們還找不到解決方案,但他們建議的解決方法如下:

禁用文件| 中工具窗口中的顯示圖 設置| 工具| Python Scientific

這對我有用,雖然它沒有在PyCharm窗口中繪圖。

您可以嘗試以下幾種方法:

首先,您可以嘗試更新Qt。 你可能有一些舊版本。

print(plt.get_backend())

驗證您使用的是哪個后端。 如果您使用的是Qt4 ,請嘗試使用Qt5后端。

接下來,通過更新Qt5到最新版本

pip install --upgrade PyQt5

此外,您可以嘗試放棄Qt並切換到Tk后端:添加

import matplotlib
matplotlib.use('TkAgg')

在導入pyplot之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM