Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法同时运行matplotlib和pyqt4_Python_Matplotlib_Pyqt4 - Fatal编程技术网

Python 无法同时运行matplotlib和pyqt4

Python 无法同时运行matplotlib和pyqt4,python,matplotlib,pyqt4,Python,Matplotlib,Pyqt4,我正在使用PyQt4运行一些代码,我想使用它的数据绘制一个图形。但当我尝试这样做时,它会报告 QPixmap: Must construct a QGuiApplication before a QPixmap 代码如下: from PyQt4 import QtCore import sys import matplotlib.pyplot as plt import numpy as np def run(): #here is some code, I delete them si

我正在使用PyQt4运行一些代码,我想使用它的数据绘制一个图形。但当我尝试这样做时,它会报告

QPixmap: Must construct a QGuiApplication before a QPixmap
代码如下:

from PyQt4 import QtCore
import sys
import matplotlib.pyplot as plt
import numpy as np
def run():
   #here is some code, I delete them since they are useless for this question
   return data1 #data1 is a list with 30 elements

app = QtCore.QCoreApplication(sys.argv)
client.finished.connect(app.quit)
QtCore.QTimer().singleShot(0,lambda:client.timed_range_stream(5000))
app.exec_()
fig = plt.figure()
ax1 = fig.add_subplot(111)
data2 = run()
datalen = np.linspace(0,10,len(data2))
ax1.plot(datalen,data2,lw = 2)
plt.show()
因为matplotlib使用pyqt4作为后端,所以我很困惑为什么会发生这个错误。它应该自动创建一个QGUI应用程序。我的意思是,无论我之前是否使用pyqt4,下面的代码“app.exec_389;()”都应该自动创建一个QGUI应用程序。如果我错了,请指出


非常感谢你的帮助!请给我一些建议。

PyQt抱怨您没有运行Gui事件循环
app.exec()
确实会启动一个事件循环,但这取决于
app
是什么。在您的例子中,它是
QCoreApplication
对象。您希望它如何启动Gui事件循环?这就像买了一个平底锅,期待它能煮比萨饼

matplotlib
当然基于
PyQt
。我相信您也可以在仅控制台的应用程序中使用它。因此,PyQt将无法判断您是否需要gui或控制台应用程序

QCoreApplication
用于编写基于控制台的应用程序。要管理的事件和流程更少。如果你想显示一个窗口,即使是一个简单的窗口,它需要更多的工作。在
qgui应用程序中处理额外工作的beast

现在转到Qt版本。您正在使用
PyQt4
,但投诉称您需要创建
qgui应用程序。但是,Qt4/PyQt4中没有
QGuiApplication
或对它的任何引用。这让我相信,您的
matplotlib
copy可能使用了PyQt5,或者PyQt5依赖性来自某个不太清楚的来源,我不确定。检查所用PyQt版本的详细信息

如果您正在使用PyQt4,请从PyQt4添加
,并在开始时导入QtGui
。 然后将
app=QtCore.QCoreApplication(…)
更改为
app=QtGui.QApplication(…)

对于PyQt5,从PyQt5导入QtGui添加
,QtWidgets
。 然后将
app=QtCore.QCoreApplication(…)
更改为
app=qtwidts.QApplication(…)

那会解决你的问题


PS:请记住,您不能混合使用PyQt4和PyQt5。

PyQt的抱怨是您没有运行Gui事件循环
app.exec()
确实会启动一个事件循环,但这取决于
app
是什么。在您的例子中,它是
QCoreApplication
对象。您希望它如何启动Gui事件循环?这就像买了一个平底锅,期待它能煮比萨饼

matplotlib
当然基于
PyQt
。我相信您也可以在仅控制台的应用程序中使用它。因此,PyQt将无法判断您是否需要gui或控制台应用程序

QCoreApplication
用于编写基于控制台的应用程序。要管理的事件和流程更少。如果你想显示一个窗口,即使是一个简单的窗口,它需要更多的工作。在
qgui应用程序中处理额外工作的beast

现在转到Qt版本。您正在使用
PyQt4
,但投诉称您需要创建
qgui应用程序。但是,Qt4/PyQt4中没有
QGuiApplication
或对它的任何引用。这让我相信,您的
matplotlib
copy可能使用了PyQt5,或者PyQt5依赖性来自某个不太清楚的来源,我不确定。检查所用PyQt版本的详细信息

如果您正在使用PyQt4,请从PyQt4添加
,并在开始时导入QtGui
。 然后将
app=QtCore.QCoreApplication(…)
更改为
app=QtGui.QApplication(…)

对于PyQt5,从PyQt5导入QtGui添加
,QtWidgets
。 然后将
app=QtCore.QCoreApplication(…)
更改为
app=qtwidts.QApplication(…)

那会解决你的问题


PS:记住,你不能把PyQt4和PyQt5混在一起。

非常感谢!我很快就会告诉你的。非常感谢你!我很快就会告诉你的。