繁体   English   中英

无法同时运行matplotlib和pyqt4

[英]Cannot run matplotlib and pyqt4 at the same time

我正在使用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作为后端,所以我很困惑为什么会发生此错误。 它应该自动创建一个QGuiApplication。 我的意思是,无论我之前是否使用pyqt4,“ app.exec_()”下面的代码都应自动创建一个QGuiApplication。 如果我错了,请指出。

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

PyQt抱怨说您没有运行Gui EventLoop。 app.exec_()当然会启动事件循环,但这取决于什么app 在您的情况下,其QCoreApplication对象。 您如何期望它启动Gui EventLoop? 这就像买一个平底锅,然后期望它会煮比萨一样。

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

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

现在到Qt版本。 您正在使用PyQt4 ,但投诉显示您需要创建QGuiApplication 但是,在Qt4 / PyQt4中没有QGuiApplication或其任何引用。 这使我相信,您的matplotlib副本可能正在使用PyQt5,或者PyQt5依赖项来自某些晦涩的来源,我不确定。 检查所使用的PyQt版本的详细信息。

如果您使用的是PyQt4,请from PyQt4 import QtGui开始添加from PyQt4 import QtGui 然后将app = QtCore.QCoreApplication(...)更改为app = QtGui.QApplication(...)

如果是PyQt5,请from PyQt5 import QtGui, QtWidgets PyQt5中添加from PyQt5 import QtGui, QtWidgets并在开头添加from PyQt5 import QtGui, QtWidgets 然后将app = QtCore.QCoreApplication(...)更改为app = QtWidgets.QApplication(...)

这样可以解决您的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM