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