[英]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.