繁体   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