簡體   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