Python 无法同时运行matplotlib和pyqt4
我正在使用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
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混在一起。非常感谢!我很快就会告诉你的。非常感谢你!我很快就会告诉你的。